使用源过滤获取 Spring 数据弹性搜索查询中的所有非完整字段



我们使用本机搜索查询生成器,如下所示:

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,如果源文档中存在字段,它只会按名称返回字段。

最新更新