1

我是弹性搜索的新手。成功实现了用于匹配单个字段的搜索文档 API,如下所示:

SearchRequest searchRequest = new SearchRequest(indexName);

//Single field match, only for documentId
QueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("documentId", documentId); 

SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(matchQueryBuilder);
searchRequest.source(sourceBuilder);

SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);

我想在单个 API 中使用多个字段过滤数据,例如,需要根据以下条件在上述 API 中添加更多过滤器:

documentNumber > 66 &&  (documentCreatedDate >= date1 && documentCreatedDate <= date2) && documentName like "%test%"

谁能帮助如何在单个 SearchRequest 中应用所有这些过滤器?

4

1 回答 1

1

您可以使用文档中指定的 rangeQuery

QueryBuilders.rangeQuery("documentNumber")                                             
    .gte(66); 
QueryBuilders.rangeQuery("documentCreatedDate")                                             
    .gte(date1)
    .lt(date2); 

对于模式,您可以使用 wildcardQuery:

wildcardQuery(
        "documentName",                                              
        patternString); 

来自 Docs:
查找指定字段包含与指定模式匹配的术语的文档,其中模式支持单字符通配符 (?) 和多字符通配符 (*)

要在单个查询中应用多个过滤器,请参阅答案。

于 2020-06-18T07:54:46.347 回答