简体   繁体   English

将 elasticsearch bool 查询转换为 Java

[英]Convert elasticsearch bool query into Java

GET feeds/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "nested": {
            "path": "comment",
            "query": { 
              "match": {
                "comment.c_text": "hey"
              }
            },"inner_hits": {
              "highlight": {
                "require_field_match": "true"
                
              }
            }
          }
        },
        {
          "term": {
            "title": {
              "value": "hey"
            }
          }
        },
        {
          "term": {
            "body": {
              "value": "hey"
            }
          }
        }
      ]
    }
  }
}

I am new to Elasticsearch, I get my desired result in kibana now I want to use this query in my Java application as I want to use this bool search query into my spring-boot application.我是 Elasticsearch 的新手,我在 kibana 中得到了我想要的结果,现在我想在我的 Java 应用程序中使用这个查询,因为我想在我的 spring-boot 应用程序中使用这个 bool 搜索查询。

Can anyone tell me how to convert this query into Java?谁能告诉我如何将此查询转换为 Java?

You can Java Rest client with ES 7.17.3 version using below dependancy您可以使用以下依赖项使用 ES 7.17.3 版本的 Java Rest 客户端

<dependency>
     <groupId>co.elastic.clients</groupId>
     <artifactId>elasticsearch-java</artifactId>
     <version>7.17.3</version>
</dependency>
<dependency>
     <groupId>com.fasterxml.jackson.core</groupId>
     <artifactId>jackson-databind</artifactId>
     <version>2.12.3</version>
</dependency>

Below is Java code:下面是Java代码:

Query bodyTermQuery = TermQuery.of(tq -> tq.field("body").value("hey"))._toQuery();
Query titleTermQuery = TermQuery.of(tq -> tq.field("title").value("hey"))._toQuery();

Query matchQuery = MatchQuery.of(mq -> mq.field("comment.c_text").query("hey"))._toQuery();

Query nestedQuery = NestedQuery.of(nq -> nq.path("comment").query(matchQuery)
                .innerHits(ih -> ih.highlight(h -> h.requireFieldMatch(true))))._toQuery();

SearchResponse<Object> response = client.search(
                s -> s.index("feeds").query(q -> q.bool(b -> b.should(nestedQuery, titleTermQuery, bodyTermQuery))),
                Object.class);

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

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