Java QueryBuilders的嵌套Elasticsearch查询

Abh*_*i.G 3 java query-builder elasticsearch

我试图在java querybuilder中为elasticsearch实现此elasticsearch查询。但我无法获得同等的结果。有人能帮忙吗。

 GET /XX/XX/_search
    {
       "query": {
          "bool": {
             "must": [
                {
                   "nested": {
                      "path": "XX",
                      "filter": {
                         "term": {
                            "A": "7:140453136:T"
                         }
                      }
                   }
                },
                {
                   "nested": {
                      "path": "XX",
                      "filter": {
                         "term": {
                            "B": "RF"
                         }
                      }
                   }
                },
                {
                   "nested": {
                      "path": "XX",
                      "filter": {
                         "term": {
                            "C": "RFFF"
                         }
                      }
                   }
                }
             ]
          }
       }
    }
Run Code Online (Sandbox Code Playgroud)

我试过的代码:

   QueryBuilders qbWithArguments = QueryBuilders.boolQuery()
                    .must(QueryBuilders.termQuery("A", "RF"))
                    .must(QueryBuilders.termQuery("B", "EF"))
                    .must(QueryBuilders.termQuery("C", "RF"));
Run Code Online (Sandbox Code Playgroud)

Ric*_*cha 6

您也需要添加nested query。使用以下代码:

QueryBuilders.boolQuery().must(nestedQuery("XX", FilterBuilders.termFilter("A","RF")))
                             .must(nestedQuery("XX", FilterBuilders.termFilter("B","EF")))
                             .must(nestedQuery("XX", FilterBuilders.termFilter("C","RF")))
Run Code Online (Sandbox Code Playgroud)

对于更高版本,您可以使用:

QueryBuilders.boolQuery().must(nestedQuery("XX", QueryBuilders.boolQuery()
           .should(QueryBuilders.termQuery("A","RF"))
           .should(QueryBuilders.termQuery("B","EF"))
           .should(QueryBuilders.termQuery("C","RF"))
           .minimumShouldMatch("1")))
Run Code Online (Sandbox Code Playgroud)

注意:在6.7中,即使保留文档ScoreMode是可选的,使用Java QueryBuilders时也可能需要提供此参数。

  • nestedQuery()不接受FilterBuilders作为第二个参数。它期待QueryBuilder。 (2认同)