ElasticSearch:紧跟查询的更新(Java API)
问题描述:
我们正在使用elasticsearch。实质上,我需要插入一条记录,然后根据数据进行查询,并可靠地返回最近插入的行。 (这是导入分层数据的导入工具,并且随着实体插入到ES中,该工具需要检查新节点引用的现有节点)。ElasticSearch:紧跟查询的更新(Java API)
我已经尝试了几件事情。首先,如果我删除并重建每个插入索引,它的工作原理(显然不能在现实世界中做到这一点)。
第二,我已经尝试设置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中插入记录后,立即运行应返回该记录的查询时,可靠地在结果中记录该记录。
答
设置refresh_interval
为-1
实际上禁用自动刷新。
你可以通过这样的刷新参数设置为true达到预期的效果:
client.prepareUpdate(...).setRefresh(true).execute().actionGet();
这种方式,刷新操作将您的更新后进行立即和更新的文档将可以搜索到的你希望。
当心:刷新操作代价高昂,不应在索引大量文档时执行。