我使用elasticsearch.js将文档从一个索引移动到另一个索引。
1a)查询所有文档的index_new并显示在页面上。 1b)使用index_old查询通过id获取文档。 2)使用insert to index_new,从index_old插入结果。 3)从index_old删除文档(按id)。
4)重新查询index_new以查看所有文档(包括新文档)。但是,此时,它返回与1a中返回的结果相同的结果列表。不包括新文件。
这是因为缓存吗?当我刷新整个页面并触发1a时,新文档就在那里......但不是没有刷新。
谢谢, 丹尼尔
答案 0 :(得分:0)
这是由于每个分片和副本的elasticsearch索引内发生的段合并和刷新。
每当您写入索引时,您都不会写入原始索引文件,而是写入名为 segment 的较新的较小文件,然后在后台批处理作业中将其合并到较大的文件中。
您可能遇到的下一个问题是 这件事发生的次数或者如何控制
索引级别配置中有一个名为 refresh_interval 的设置。它可以有多个值,具体取决于您要使用的策略类型。
refresh_interval -
-1:要停止elasticsearch处理合并,并使用elasticsearch中的 _refresh API控制您。
X:x是一个整数,其值为秒。因此,elasticsearch将每隔x秒刷新所有索引。
因此,如果您使用设置来设置刷新间隔的周期,则假设在 max 的下一个X到2X秒内具有一致状态。
Segment Merge Background details
https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-refresh.html
https://www.elastic.co/guide/en/elasticsearch/reference/5.4/indices-update-settings.html