我想使用Rest高级客户端在弹性搜索中仅重新索引文档中的选定字段。
我知道弹性搜索查询可以实现这一点,但我不知道它是使用rest客户端的等效查询。
以下是我试图使用rest客户端-实现的弹性搜索查询
{
"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个字段。
您需要使用以下代码,因为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);