2017-02-23 43 views
0

我有一個字段叫last_post_date存儲在elasticsearch中。Elasticsearch在服從索引後不服從_mapping

它表現爲:

... 
"last_post_date": "1485281760000", 
... 

而且具有映射爲:

"last_post_date": { 
    "type": "text", 
    "fields": { 
     "keyword": { 
      "type": "keyword", 
      "ignore_above": 256 
     } 
    } 
}, 

現在我創建一個映射爲一個新的指標:

... 
"last_post_date": { 
    "type": "date", 
    "format": "epoch_millis", 
    "index": true, 
    "doc_values": true 
}, 
... 

,並做了充分reindex via: http://127.0.0.1:9200/_reindex

的問題是,即使重建索引字段的值後,而映射顯示存儲爲字符串,而不是日期:

... 
"last_post_date": { 
    "type": "date", 
    "store": true, 
    "format": "epoch_millis" 
}, 
... 

任何想法,爲什麼?

回答

1

您在源代碼中看到的內容,即形式爲"1485281760000"的字符串狀時間戳不會更改,並且始終會反映您發送給Elasticsearch的完全相同的JSON。

但是,索引時,字符串"1485281760000"將被確實解釋並索引爲長值1485281760000

如果您要更改您發送的JSON源代碼,而不是字符串時間戳,如下所示,那麼源代碼將顯示一個很長的時間戳。

... 
"last_post_date": 1485281760000, 
... 

長話短說:

  • 你在_source看到正是你送什麼給ES
  • 源的每個字段根據您所創建的映射解釋和索引,即字符串時間戳將被強制爲一個long並解釋爲格式的日期epoch_millis
  • 如果某些字段值無法正確解釋,索引,強制根據您的映射,您將收到錯誤並且文檔根本​​不會被索引。
+0

哇,實際上現在整理作品,所以我認爲你是對的!謝謝(你的)信息。 –

+0

酷,很高興它幫助! – Val