【问题标题】:ElasticSearch document refresh=true does not appear to workElasticSearch 文档 refresh=true 似乎不起作用
【发布时间】:2021-11-12 13:33:51
【问题描述】:

为了加快我们网站上的搜索速度,我创建了一个小型弹性搜索实例,它保留了我们数据库中所有“可搜索”字段的副本。它仅包含几百万个文档,每个文档的平均大小约为 1KB。目前(开发中)我们只有 2 个节点,但在生产中可能需要更多节点。

我们的应用程序是一个“主要阅读”应用程序 - 可能每天更新 1000 个文档,但它们每天被阅读和搜索成千上万次。

每个文档代表票务系统中的一个案例,当用户研究和关闭案例时,该案例可能会在白天改变状态。如果研究人员关闭了一个案例,然后立即刷新了他的开放工作队列,我们​​预计该案例将从他们的队列中消失,这是由对我们的 Elastic Search 实例的查询驱动的,按状态过滤。状态是案例索引中的一个字段。

我们收到的投诉是,当研究人员关闭案例时,在立即刷新队列后,在过滤“进行中”案例时,该案例仍会返回。如果他在一两秒后刷新视图,它就消失了。

为了解决这个问题,我在更新文档时添加了 refresh=true,例如 curl -XPUT 'https://my-dev-es-instance.com/cases/_doc/11?refresh=true' -d '{"status":"closed", ... }'

但问题仍然存在。

这是我从上述请求中得到的回复:

{"_index":"cases","_type":"_doc","_id":"11","_version":2,"result":"updated","forced_refresh":true ,"_shards":{"total":2,"successful":1,"failed":0},"_seq_no":70757,"_primary_term":1} p>

响应似乎验证了是否收到了强制刷新请求,尽管它确实说在总共 2 个分片中,1 个成功,0 个失败。不确定另一个,但由于我只有 2 个节点,这是否意味着它更新了辅助节点?

根据doc要在操作发生后立即刷新分片(不是整个索引),使文档立即出现在搜索结果中,可以将刷新参数设置为true。将此选项设置为 true 仅应在仔细考虑并验证它不会导致性能不佳(从索引和搜索的角度来看)之后进行。请注意,使用 get API 获取文档是完全实时的,不需要刷新。

我的期望合理吗?有没有更好的方法来做到这一点?

【问题讨论】:

  • 你试过清除缓存吗?使用cases/_cache/clear?query=true 会阻止在您重做搜索时返回缓存响应
  • @ExploZe 听起来比刷新单个分片要贵很多,不是吗?由于我的弹性实例的全部目的是加快搜索速度,我担心这可能会对搜索时间产生更大的负面影响。

标签: elasticsearch amazon-elasticsearch


【解决方案1】:

经过更多测试,我得出的结论是我的问题是由于应用程序逻辑错误,而不是 ElasticSearch 的问题。刷新标志的行为符合预期。为错误信息道歉。

【讨论】:

    猜你喜欢
    • 2012-07-10
    • 2017-12-26
    • 2011-03-30
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-25
    相关资源
    最近更新 更多