java QueryBuilders的嵌套弹性搜索查询。

时间:2016-01-29 00:43:26

标签: 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"
                         }
                      }
                   }
                }
             ]
          }
       }
    }

我试过的代码:

   QueryBuilders qbWithArguments = QueryBuilders.boolQuery()
                    .must(QueryBuilders.termQuery("A", "RF"))
                    .must(QueryBuilders.termQuery("B", "EF"))
                    .must(QueryBuilders.termQuery("C", "RF"));

1 个答案:

答案 0 :(得分:3)

您还需要添加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")))

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

QueryBuilders.boolQuery().must(nestedQuery("XX", QueryBuilders.boolQuery().should(QueryBuilders.termQuery("A","RF"))
            .should(QueryBuilders.termQuery("B","EF")).should(QueryBuilders.termQuery("C","RF")).minimumShouldMatch("1")))