2017-06-18 71 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

相關問題