使用源过滤获取 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 如果源文档中存在该字段,则按名称进行过滤。