[英]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.