簡體   English   中英

ElasticSearch:更新緊跟查詢(Java API)

[英]ElasticSearch: Update followed closely by query (Java API)

我們正在使用elasticsearch。 本質上,我需要插入一條記錄,然后查詢數據並可靠地返回最近插入的行。 (這是一個導入工具,用於導入分層數據,並且在將實體插入ES中時,該工具需要檢查新節點引用的現有節點)。

我已經嘗試了幾件事。

首先,如果我刪除並重建每個插入的索引,它就可以工作(在現實世界中顯然無法做到這一點)。

其次,我嘗試將refresh_interval設置為-1:

 settings_map.put("index.refresh_interval", "-1");
      org.elasticsearch.common.settings.Settings settings = ImmutableSettings.settingsBuilder().put(settings_map)
          .build();

      UpdateSettingsRequestBuilder usrb = es.admin().indices()
          .prepareUpdateSettings();
      usrb.setIndices("pm");
      usrb.setSettings(settings);
      usrb.execute().actionGet();

第三,我嘗試將threading選項設置為false:

tc.prepareUpdate(domain, type, id)).setListenerThreaded(false)...

我也看到過setOperationThreaded設置,但是在prepareUpdate()上似乎不可用。


這些似乎都沒有達到預期的效果。

所需的效果是:將記錄插入ElasticSearch之后,立即運行應返回該記錄的查詢時,將記錄可靠地包含在結果中。

refresh_interval設置為-1實際上會禁用自動刷新。

您可以通過將refresh參數設置為true來達到預期的效果,如下所示:

client.prepareUpdate(...).setRefresh(true).execute().actionGet();

這樣,更新操作將在更新后立即執行,並且可以根據需要搜索更新的文檔。

當心 :刷新操作的成本很高,在索引大量文檔時不應執行刷新操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM