2017-06-18 72 views
0

我正在使用elasticsearch.js将文档从一个索引移动到另一个索引。弹性查询在插入后返回相同结果

1a)查询所有文档的index_new并在页面上显示。 1b)使用index_old的查询来通过id获取文档。 2)使用insert_index_new,从index_old插入结果。 3)从index_old中删除文件(按id)。

4)Requery index_new查看所有文档(包括新文档)。但是,此时它会返回与1a中返回的结果相同的列表。不包括新文件。

这是因为缓存?当我刷新整个页面,并且1a被触发时,新文档就在那里..但不是没有刷新。

感谢, 丹尼尔

回答

0

这是由于每个碎片和副本的elasticsearch指标内发生的片段的合并,令人耳目一新。

无论何时写入索引,都不会写入原始索引文件,而是写入较新的较小文件,称为然后在后台批处理作业中将其合并到较大的文件中。

,你可能有

下一个问题是 多久这件事情发生,或者一个人如何能有在这个

  1. 控制有一个在指数级配置称为refresh_interval的设置。它可以有多个值,具体取决于您要使用的策略类型。

    refresh_interval -

-1:要停止elasticsearch处理合并和你在elasticsearch的_refresh API您的最终控制。

X:x是一个整数并且具有以秒为单位的值。因此,elasticsearch将每隔x秒刷新一次所有索引。

  1. 如果您已将复制启用到您的索引中,那么您也可能遇到切换结果值的情况。这只是因为索引具有多个分片并且分片具有多个副本。因此不同的副本具有不同的窗口模式来刷新。因此,查询查询实际上路由到不同的分片副本,同时在时间窗口中显示不同的状态。

因此,如果您使用的是设置来设置刷新间隔期再假设在最大有在旁边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

+0

两个小意见:您可能想看看['刷新= wait_for'](https://www.elastic.co/guide/en/ elasticsearch/reference/current/docs-refresh.html),如果你通过ID进行获取,它将总是得到最新版本(在5.x +中在后台进行强制刷新;在从translog读取值之前) – xeraa

相关问题