简体   繁体   English

如何使用 Java 库 (QueryBuilder) 组合多个过滤器查询和 Elastic Search 应该

[英]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.

相关问题 如何在java中的弹性搜索Querybuilder中处理多个“和”“或”运算符 - How to handle multiple 'and' 'or' operators in Elastic search Querybuilder in java 如何使用Java querybuilder查询MongoDB的ISODate字段 - How do I query MongoDB's ISODate field using Java querybuilder 如何在弹性搜索中基于多字段值进行过滤 - How to filter based on multiple field value in elastic search java 我可以使用Elastic Search Java API按多个字段进行搜索吗? - Can I search by multiple fields using the Elastic Search Java API? 如何使用查询生成器翻译 Java 中的 Elastic Search 查询? - How to translate Elastic Search query in Java by using the query builder? 如何在弹性搜索中为多个 boolean 查询生成查询 - How can I generate Query in elastic search for multiple boolean queries 弹性搜索-Java BoolQuery API应该过滤所有不匹配的内容 - Elastic Search - Java BoolQuery API should filter which are all not matching 如何在 Hibernate 搜索中将范围查询与关键字查询相结合? - How do I combine a range query with a keyword query in Hibernate Search? 使用弹性搜索Java客户端时,如何上传pdf到elasticsearch? - How do I upload a pdf to elasticsearch when using the elastic search java client? 如何使用QueryBuilder,Lucene Query和FullTextQuery显示休眠搜索结果? - How to display hibernate search results using QueryBuilder, Lucene Query & FullTextQuery?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM