Elasticsearch [2.3] - 建议查询不返回更新的文档

时间:2017-02-01 16:33:56

标签: elasticsearch autocomplete

我一直试图用弹性更新一些自动建议文档:

{"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

尝试清除缓存 - 仍然获取未更新的文档。

我找不到任何文件或想到任何其他解释这种奇怪的行为。

感谢。

1 个答案:

答案 0 :(得分:0)

我们遇到了同样的问题。它是由于elasticsearch处理文档更新和删除的方式而发生的。

您可以阅读一下here

elasticsearch中的所有文档都是不可变的。由于文档是不可变的,因此在更新文档时,旧文档将标记为删除,并创建新文档。当elasticsearch索引中的段合并时,旧文档将被真正删除。这就是问题所在。在我的情况下,当我们使用建议查询时,我们得到了两个结果。

要解决此问题,您可以在更新后强制合并细分。这很慢但有效。

POST /index_name/_optimize?max_num_segments=1

我认为优化api已被弃用。

如果它不起作用,您也可以使用force merge