我们使用本机搜索查询生成器,如下所示:
String[] includeFields = new String[]{"idDl", "clientName"};
String[] excludeFields = new String[]{"Address"};
Query searchQuery = new NativeSearchQueryBuilder()
.withQuery(matchAllQuery())
.withSourceFilter(new FetchSourceFilter(includeFields, excludeFields))
.build();
return elasticsearchRestTemplate.queryForObject((StringQuery) searchQuery, User.class);
我能够获取所有响应数据,但第一个响应对象都是空字段,我想在最终响应中排除所有空字段对象。我们正在使用 spring-data-elasticsearch 3.2.6.RELEASE,下面是示例响应:
[{
"idDl": null,
"clientName": null,
"Address": null
},
{
"idDl": 19810008,
"clientName": "ABC",
"Address": "NYC"
}]
您应该做的是创建一个查询,该查询将排除具有空值的字段的文档,而不是执行match_all
。改为用这个更改您的查询:
...
.withQuery(existsQuery("idDl"))
...
还值得注意的是,仅靠源过滤不会查看字段的值以检查它们是否为 null,如果源文档中存在字段,它只会按名称返回字段。