ElasticSearch:更新后紧跟查询(Java API)

时间:2014-09-23 23:46:12

标签: java elasticsearch

我们正在使用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之后,当立即运行应该返回该记录的查询时,可靠地在结果中记录该记录。

1 个答案:

答案 0 :(得分:1)

refresh_interval设置为-1实际上已禁用自动刷新。

您可以通过将refresh参数设置为true来实现所需的效果,如下所示:

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

这样,您的更新后将立即执行刷新操作 ,并且可以根据需要搜索更新的文档。

小心:刷新操作成本高昂,在索引大量文档时不应执行。