我一直试图用弹性更新一些自动建议文档:
{"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 :(得分:0)
我们遇到了同样的问题。它是由于elasticsearch处理文档更新和删除的方式而发生的。
您可以阅读一下here
elasticsearch中的所有文档都是不可变的。由于文档是不可变的,因此在更新文档时,旧文档将标记为删除,并创建新文档。当elasticsearch索引中的段合并时,旧文档将被真正删除。这就是问题所在。在我的情况下,当我们使用建议查询时,我们得到了两个结果。
要解决此问题,您可以在更新后强制合并细分。这很慢但有效。
POST /index_name/_optimize?max_num_segments=1
我认为优化api已被弃用。
如果它不起作用,您也可以使用force merge