使用源过滤获取 Spring 数据 Elasticsearch 查询中的所有非完整字段
Get all non-full fields in Spring Data Elasticsearch Query using source filtering
我们使用本机搜索查询生成器,如下所示:
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"))
...
同样值得注意的是,单独的源过滤不会查看您的字段的值以检查它们是否为空,它只是 returns 如果源文档中存在该字段,则按名称进行过滤。
我们使用本机搜索查询生成器,如下所示:
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"))
...
同样值得注意的是,单独的源过滤不会查看您的字段的值以检查它们是否为空,它只是 returns 如果源文档中存在该字段,则按名称进行过滤。