我们正在使用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();
第三,我尝试将线程选项设置为false:
tc.prepareUpdate(domain, type, id)).setListenerThreaded(false)...
我也看到了setOperationThreaded
设置,但这似乎不适用于prepareUpdate()。
这些似乎都没有达到预期的效果。
期望的效果是:在将记录插入ElasticSearch之后,当立即运行应该返回该记录的查询时,可靠地在结果中记录该记录。
答案 0 :(得分:1)
将refresh_interval
设置为-1
实际上已禁用自动刷新。
您可以通过将refresh参数设置为true来实现所需的效果,如下所示:
client.prepareUpdate(...).setRefresh(true).execute().actionGet();
这样,您的更新后将立即执行刷新操作 ,并且可以根据需要搜索更新的文档。
小心:刷新操作成本高昂,在索引大量文档时不应执行。