[英]How do I combine multiple filter query and should of Elastic Search using Java Library (QueryBuilder)
I have a query like below:我有如下查询:
{
"query": {
"bool": {
"filter": [
{
"range": {
"age": {
"from": 57,
"to": null,
}
}
},
{
"terms": {
"_id": [
"1212yas1",
"sdfsfs1"
]
}
}
],
"should": [
{
"query_string": {
"query": "(football) OR (Cricket)",
"default_field": "hobbies.hobby"
}
}
]
}
}
} }
I am very new to Elastic Search, I want to implement above query using Java library of Elastic Search how can I do this?我是 Elastic Search 的新手,我想使用 Elastic Search 的 Java 库实现上述查询,我该怎么做?
hobbies is nested object, age is long.爱好嵌套object,年龄长。
First things is that, You need to use IDs
type of query as you are search on _id
field.首先,您需要在搜索
_id
字段时使用IDs
类型的查询。
If you are using Java high level client then you can use below code:如果您使用的是Java 高级客户端,那么您可以使用以下代码:
QueryBuilder query = QueryBuilders.boolQuery().filter(new RangeQueryBuilder("age").from(57))
.filter(new IdsQueryBuilder().addIds("1212yas1", "sdfsfs1"))
.should(new QueryStringQueryBuilder("(football) OR (Cricket)").defaultField("hobbies.hobby"));
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(query);
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
If you are using new Java client then you can use below code:如果您使用的是新的 Java 客户端,那么您可以使用以下代码:
Query query = Query.of(
q -> q.bool(BoolQuery.of(bq -> bq.filter(f -> f.range(RangeQuery.of(rq -> rq.field("age").from("57"))))
.filter(f -> f.ids(IdsQuery.of(iq -> iq.values("1212yas1", "sdfsfs1"))))
.should(s -> s.queryString(QueryStringQuery
.of(qs -> qs.query("(football) OR (Cricket)").defaultField("hobbies.hobby")))))));
If you are using new Java Client Api, try the code bellow:如果您使用新的 Java 客户端 Api,请尝试以下代码:
var query = Query.of(q -> q.bool(BoolQuery.of(bq -> bq
.filter(f -> f
.range(RangeQuery.of(rq -> rq.field("age").from("57"))))
.filter(f -> f
.ids(IdsQuery.of(ids -> ids.values(List.of("1212yas1", "sdfsfs1")))))
.should(s -> s.queryString(
QueryStringQuery.of(qs -> qs.query("(football) OR (Cricket)").defaultField("hobbies.hobby"))))
)));
var response = client.search(SearchRequest.of(sr -> sr
.index("idx_name")
.size(10)
.query(query)
), Entity.class);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.