如何通过 Java 高级 rest 客户端在 Elastic Search 中使用多个字段进行搜索
How to search using multiple fields in Elastic Search through Java high level rest client
我是 Elastic 搜索的新手。已成功实施搜索文档 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 中应用所有这些过滤器吗?
您可以按照文档中的说明使用 rangeQuery:
QueryBuilders.rangeQuery("documentNumber")
.gte(66);
QueryBuilders.rangeQuery("documentCreatedDate")
.gte(date1)
.lt(date2);
对于模式,您可以使用通配符查询:
wildcardQuery(
"documentName",
patternString);
来自文档:
查找指定字段包含与指定模式匹配的术语的文档,其中模式支持单字符通配符 (?) 和多字符通配符 (*)
要在单个查询中应用多个过滤器,请参考答案。
我是 Elastic 搜索的新手。已成功实施搜索文档 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 中应用所有这些过滤器吗?
您可以按照文档中的说明使用 rangeQuery:
QueryBuilders.rangeQuery("documentNumber")
.gte(66);
QueryBuilders.rangeQuery("documentCreatedDate")
.gte(date1)
.lt(date2);
对于模式,您可以使用通配符查询:
wildcardQuery(
"documentName",
patternString);
来自文档:
查找指定字段包含与指定模式匹配的术语的文档,其中模式支持单字符通配符 (?) 和多字符通配符 (*)
要在单个查询中应用多个过滤器,请参考