2016-08-09 226 views
1

TLDR:即使映射表示not_analyzed,也会分析一些字段。忽略映射忽略

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

我用下面的Perl命令发送映射到ES

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

其中$ currentIndexName和$映射是分别看起来像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 
} 

这是否映射步骤被跳过或实现,我然后将数据发送到ES与`curl -s -XPOST "$ELASTIC_SEARCH_URL/$currentIndexName/_bulk?pretty" --data-binary \@$outputFileName`; 其中$ outputFileName是一个JSON文件的名称。

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

Kibana中的索引模式匹配所有这些索引(index- *),并使用date作为基于时间的事件字段。 我试图在数据发送后重新创建索引模式,它不会改变任何东西。 我在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 

回答

1

映射因为现有数据无法更新。您需要使用正确的映射创建新索引,并将您的文档重新索引到该索引中。这里是链接到ES文档: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

+0

谢谢你,你让我想起忘了写一些重要的事情:我实际删除数据在我开始这个过程之前(参见编辑答案)。因此,映射步骤不会创建索引,然后我发送数据? – LogicalKip

+0

在您的脚本完成后,当您对http:// localhost:9200/your-index-name?pretty = true执行GET请求时,ES是否会为您的索引返回正确的映射?如果是这样,我会尝试在Kibana刷新索引模式的字段列表。如果这不起作用,那么也许还有旧的索引,旧的映射表现符合Kibana索引模式?无论如何,看看我提到的索引模板,因为它们将在索引创建时应用正确的映射,您不需要自己修改映射。 – const314

+0

仍然不确定为什么它以前没有工作,但使用自动索引模板做了诀窍。谢谢。 – LogicalKip