not_analyzed 在映射中被忽略

not_analyzed in mapping is ignored

TLDR:即使映射显示 not_analyzed.

,也会分析某些字段

我有几组数据,每组都根据该组中包含的日期发送到 Elasticsearch 索引(它给出的索引名称如 index-25012016)。有些集合具有相同的日期,因此具有相同的索引。

我使用以下 perl 命令将映射发送到 ES

print `curl -s -XPUT "http://$ELASTIC_SEARCH_URL/$currentIndexName?pretty" -d ' $mapping'`

其中 $currentIndexName 和 $mapping 是分别类似于 index-25012016

的字符串
{
    "mappings": {
        "myMappingType": {
            "properties": {
                "present": {
                    "type":"boolean"
                },
                "records": {
                    "type":"integer"
                },
                "batchID": {
                    "type":"string",
                    "index":"not_analyzed"
                },
                "version": {
                    "type":"string",
                    "index":"not_analyzed"
                },
                "date": {
                    "type":"date",
                    "format":"yyyy-MM-dd"
                },
                "packageCreationDate": {
                    "type":"date",
                    "format":"MM/dd/yyyy-HH:mm"
                }
            }
        }
    }
}

还有几个字段。 对所有集合重复此命令,但我之前已经完成的任何 $currentIndexName 除外。 当命令为运行时,ES的回答为

{
  "acknowledged" : true
}

无论是跳过还是完成了这个映射步骤,我都会用 `curl -s -XPOST "$ELASTIC_SEARCH_URL/$currentIndexName/_bulk?pretty" --data-binary \@$outputFileName`; 将数据发送到 ES 其中 $outputFileName 是 json 文件的名称。

问题是,即使我在 Kibana/Settings/Indices 中指定了 not_analyzed,字符串字段也被标记为已分析和已编制索引,而我只想编制索引。因此,例如,由于所有版本字段都相同(“3.2.506 64 位”),饼图将显示三个相等的切片“3.2.506”、“64”和 "bit"整个未切片的“3.2.506 64 位”饼图。但是,不分析布尔值、数字、日期字段和元字段。

Kibana 中的索引模式匹配所有这些索引 (index-*) 并使用日期作为基于时间的事件字段。 我试图在发送数据后重新创建索引模式,但它没有任何改变。 我在 Windows 7 上并且不使用 logstash。

编辑:因为我现在做了很多测试,每次脚本启动时,我都会在迭代集合之前删除数据 print `curl -s -XDELETE "http://localhost:9200/index-*?pretty`; 因此脚本看起来像:

Remove data  
for each set in allSets 
    mapping (if not already mapped in a previous iteration)  
    send data to ES 

无法更新现有数据的映射。您需要使用正确的映射创建一个新索引,并将您的文档重新索引到该索引中。这是 ES 文档的 link:https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html#_updating_existing_mappings

您还可以使用索引模板自动将映射应用于新创建的索引:https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-templates.html