Zer*_*erg 2 java elasticsearch elasticsearch-java-api
有多个文档,每个文档包含大约100个字段.我想通过elasticsearch Java API 5.x执行以下搜索:
有3个字段我想用于此搜索,即
department
job
name
Run Code Online (Sandbox Code Playgroud)
我想搜索匹配"department:D1","department:D2","job:J1","job:J2""name: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();
Run Code Online (Sandbox Code Playgroud)
但是,执行查询就好像每个查询都是单个查询一样,即在本例中当d4中存在j3时,带有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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5505 次 |
| 最近记录: |