【问题标题】:How to search using multiple fields in Elastic Search through Java high level rest client如何通过 Java 高级别的客户端在 Elastic Search 中使用多个字段进行搜索
【发布时间】:2020-10-08 04:34:44
【问题描述】:

我是弹性搜索的新手。成功实现了用于匹配单个字段的搜索文档 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 中应用所有这些过滤器?

【问题讨论】:

    标签: java spring-boot elasticsearch query-builder elasticsearch-high-level-restclient


    【解决方案1】:

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

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

    对于模式,您可以使用通配符查询:

    wildcardQuery(
            "documentName",                                              
            patternString); 
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-20
      • 2020-03-11
      相关资源
      最近更新 更多