繁体   English   中英

使用java api的Elasticsearch多条件查询

[英]Elasticsearch multiple condition query using java api

有多个文档,每个文档包含大约 100 个字段。 我想通过 elasticsearch Java API 5.x 执行以下搜索:

有 3 个字段我想用于此搜索,即

department
job
name

我想搜索与“部门:D1”、“部门:D2”、“工作:J1”、“工作:J2”、“姓名:N1”等字段匹配的返回文档

我一直在尝试这样做

String[] departments = ["d1","d2","d3"];
String[] jobs = ["j1","j2","j3"];
String[] names = ["n1"];

MultiSearchRequestBuilder requestbuilder; 

requestBuilder.add(client.prepareSearch().setQuery(QueryBuilders.termsQuery("department", departments)));
requestBuilder.add(client.prepareSearch().setQuery(QueryBuilders.termsQuery("job", jobs)));
requestBuilder.add(client.prepareSearch().setQuery(QueryBuilders.termsQuery("name", names)));

MultiSearchResponse response = requestBuilder.get();

然而,查询的执行就好像每个查询都是一个单独的查询,即在这个例子中,当 j3 存在于 d4 中时,带有 d4 的文档也将被匹配

如何按照我提到的方式执行搜索? 我一直在尝试许多不同的查询,但似乎没有任何效果,是不是我遗漏了什么?

您不想使用MultiSearchRequestBuilder ,您只需要在bool/filter查询中组合您的三个约束:

BoolQueryBuilder query = QueryBuilders.boolQuery()
   .filter(QueryBuilders.termsQuery("department", departments))
   .filter(QueryBuilders.termsQuery("job", jobs))
   .filter(QueryBuilders.termsQuery("name", names));
SearchResponse resp = client.prepareSearch().setQuery(query).get();

对于使用 HighRestClient 的 Elasticsearch 5.6.4,添加所需数量的 sourcebuilder...

static RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));
public static void multisearch() throws IOException{
    SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); 
    sourceBuilder.query(QueryBuilders.termQuery("name", "vijay1"));
    SearchRequest searchRequest = new SearchRequest();
    searchRequest.indices("posts-1","posts-2").source(sourceBuilder);
    SearchResponse searchResponse = client.search(searchRequest);
    RestStatus status = searchResponse.status();
    System.out.println(searchResponse.toString());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM