我正在使用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时,新文档就在那里。但不是没有刷新。
谢谢,丹尼尔
发布于 2017-06-18 18:24:13
这是由于在每个分片和副本的elasticsearch索引内发生的段合并和刷新。
无论何时写入索引,我们都不会写入原始索引文件,而是写入较新的称为段的较小文件,然后在后台批处理作业中将其合并到较大的文件中。
您可能会遇到的下一个问题是,这种情况多久发生一次,或者如何控制此
refresh_interval -
-1 :要停止elasticsearch,请处理合并,并在您的一端使用elasticsearch中的_refresh API进行控制。
X:x是一个整数,有一个以秒为单位的值。因此,elasticsearch将每x秒刷新一次所有索引。
因此,如果您正在使用设置来设置刷新间隔的周期,那么假设在最大下的下一个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
https://stackoverflow.com/questions/44610738
复制相似问题