2017-02-01 38 views
0

我一直在試圖更新彈性幾個自動提示文件:Elasticsearch [2.3] - 建議查詢不返回更新的文檔

{"update":{"_index":"my_autosuggest_index", "_type":"my_autosuggest_type", "_id": "123"}} 
{"doc" : {my-updated-doc}, "doc_as_upsert" : true} 

的更新工作,當直接使用更新的文檔123問

GET /my_autosuggest_index/my_autosuggest_type/123 

我看到更新的文檔。

然而,查詢使用更新後的文檔時:

/my_autosuggest_index/_suggest 

{ 
    "hotels-suggest": { 
    "text": "London", 
    "completion": { 
     "field": "suggest", 
     "size": 10, 
     "context": { 
     "displayType": "Airports" 
     } 
    } 
    } 
} 

我更新之前得到doc 123

試圖清除緩存 - 仍然得到未更新文檔。

我找不到任何文檔或想到的這種怪異的行爲的任何其他解釋。

謝謝。

回答

0

我們面臨同樣的問題。它是由於elasticsearch處理文檔更新和刪除的方式而發生的。

你可以閱讀一些關於它here

在elasticsearch所有文件都是不可變的。由於文檔是不可變的,當您更新文檔時,舊文檔被標記爲刪除並創建一個新文檔。當elasticsearch索引中的段合併時,舊文檔將被真正刪除。這就是問題所在。在我的情況下,當我們使用建議查詢時,我們得到了兩個結果。

爲了克服這一點,你可以強制更新後合併的段。這很慢但有效。

POST /index_name/_optimize?max_num_segments=1

我認爲優化API已被棄用。

如果它不工作,你也可以使用force merge

+0

謝謝回答,我已經試過力合併 - 粉碎的節點,由於沒有足夠的磁盤空間.. – Daniel

+0

哦!! ..是你能恢復數據?你能檢查日誌並看到它崩潰嗎?除了足夠的磁盤空間之外,還有其他什麼原因。 – pratikvasa

相關問題