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
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