elasticsearch 在java中使用Rest高级客户端重新索引selected _source字段

zu0ti5jz  于 2022-11-02  发布在  ElasticSearch
关注(0)|答案(1)|浏览(138)

我想使用Rest高级客户端在elasticsearch中从我的文档中 _仅重新索引选定的字段*。
我知道elasticsearch查询可以实现这一点,但我不知道它是否是使用rest客户端的等效查询。
下面是我尝试使用rest客户端实现的ElasticSearch查询-

{
  "body" : {
     "source" : {
        "index" : "my source index name",
        "_source" : "id, name, rollNo"
     },
     "dest" : {
        "index" : "my destination index name"
     }
  }
}

为了用java编写使用rest客户端的等价查询,我使用了以下代码-

ReindexRequest reindexRequest = new ReindexRequest();
reindexRequest.setSourceIndices("source index name").setDestIndex("destination index name");
reindexRequest.setDocTypes("id", "name", "rollNo", "_doc");
client.reindex(reindexRequest,RequestOptions.DEFAULT);

但是上面的代码并没有像预期的那样工作。它正在重新索引我文档中的所有字段。我只想从每个文档中选择3个字段来重新索引。

0tdrvxhp

0tdrvxhp1#

您需要使用下面的代码,因为setDocTypes不用于源代码过滤。
由于没有直接方法可用于设置源过滤器,因此您需要使用以下代码更改底层搜索请求。

ReindexRequest reindexRequest = new ReindexRequest();
reindexRequest.setSourceIndices("source index name").setDestIndex("destination index name");
reindexRequest.setDocTypes("_doc");

String[] include=new String[] {"id", "name", "rollNo"};
String[] exclude=new String[] {"test"};
reindexRequest.getSearchRequest().source().fetchSource(include, exclude);

client.reindex(reindexRequest,RequestOptions.DEFAULT);

相关问题