仅返回弹性搜索本机查询Java api中的特定字段

时间:2016-07-07 03:19:51

标签: elasticsearch spring-data-elasticsearch

我正在构建本机查询,但我只想返回某些字段,所有这些字段都保存在父字段中。我想我正在寻找REST API的_source等效的QueryBuilders或NativeSearchQueryBuilder。这是一个代码示例:

NativeSearchQueryBuilder sb = new NativeSearchQueryBuilder()
.withIndices("myIndex")
.withTypes("myType")
.withQuery(QueryBuilders.queryStringQuery("parent.field2:Foo*"));
.withFields("parent.field1");

我希望这会返回一个只有parent.field1的列表,这些列表与父类如Foo *的对象相关联。但它什么也没有回报。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

经过一番研究,我发现答案是在NativeSearchQueryBuilder中。我刚刚使用旧版本的spring-data弹性搜索,所以我看不到这个方法:withSourceFilter。这样做的方法是:

NativeSearchQueryBuilder sb = new NativeSearchQueryBuilder()
.withIndices("myIndex")
.withTypes("myType")
.withQuery(QueryBuilders.queryStringQuery("parent.field2:Foo*"));
.withSourceFilter(new FetchSourceFilter(<String array of includes>, null));

FetchSourceFilter接受2个参数,包含一个String []数组和一个排除。在我的例子中,我有一个像新String [] {&#34; parent.field1&#34;}这样的数组传递给FetchSourceFilter,而FetchSourceFilter又被传递给withSourceFilter。然后,上面的搜索将返回(一旦构建并运行)parent.field1的列表,其中parent.field2类似于Foo *。

我升级到的版本是spring-data-elasticsearch 2.0.2。

相关问题