使用Java API和Rest API查询的Elasticsearch嵌套查询有不同的响应

时间:2019-09-27 12:28:36

标签: elasticsearch

我正在使用Java API处理我本地计算机上的嵌套映射索引的Elasticsearch(7.1.1)嵌套查询。我得到的响应与我拥有的其余api查询不同。

我有一个映射,指定它是嵌套的,当我在kibana上对其进行测试时,它可以正常工作。

这是使用Rest api的示例查询。

GET my-index/_search
{
   "query":{
      "bool":{
         "must":[
            {
               "nested":{
                  "path":"xx.yy.",
                  "query":{
                     "bool":{
                        "must":[
                           {
                              "match":{
                                 "xx.yy.NAME":"cc"
                              }
                           },
                           {
                              "match":{
                                 "xx.yy..VALUE":"ss"
                              }
                           }
                        ]
                     }
                  }
               }
            },
            {
               "nested":{
                  "path":"xx.yy",
                  "query":{
                     "bool":{
                        "must":[
                           {
                              "match":{
                                 "xx.yy.NAME":"ff"
                              }
                           },
                           {
                              "match":{
                                 "xx.yy.VALUE":"ee"
                              }
                           }
                        ]
                     }
                  }
               }
            },
            {
               "nested":{
                  "path":"xx.yy",
                  "query":{
                     "bool":{
                        "must":[
                           {
                              "match":{
                                 "xx.yy.NAME":"kk"
                              }
                           },
                           {
                              "match":{
                                 "xx.yy.VALUE":"gg"
                              }
                           }
                        ]
                     }
                  }
               }
            }
         ]
      }
   }
}

这是我想出的等效Java代码。

searchSourceBuilder.query( QueryBuilders.boolQuery ()
    .must(QueryBuilders.nestedQuery( path,  matchQuery ( fNameOne, fValueOne ),ScoreMode.Avg )).minimumShouldMatch ( 1 )
    .must(QueryBuilders.nestedQuery( path,  matchQuery ( fNameTwo, fValueTwo ),ScoreMode.Avg )).minimumShouldMatch ( 1 )
    .must(QueryBuilders.nestedQuery (path,  matchQuery ( fNameThree, fValueThree ),ScoreMode.Avg )).minimumShouldMatch(1)); 

任何人都可以指出我犯错的地方或给我指示如何解决此问题的方法吗?非常感谢您的帮助。

0 个答案:

没有答案