2016-08-09 222 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