为什么此Elasticsearch查询不使用组合查询返回预期结果?

时间:2017-06-22 13:07:14

标签: elasticsearch

我正在通过必须在lastName字段中以某种方式出现“Thomas”的文档来查询我的索引,并且还应该根据geo_point查询返回返回结果。 geo_point子句中出现should查询,因为有可能会传入多个。如果有匹配,我希望文档作为匹配返回。知道为什么这不起作用吗?我已经按照文档as outlined here进行了操作。

“应该:这些查询中至少有一个必须匹配。相当于OR”

{
"sort": [{
    "_score": {
        "order": "desc"
    }
}],
"query": {
    "bool": {
        "must": [{
            "query_string": {
                "default_field": "lastName",
                "query": "Thomas"
            }
        }],
        "should": [{
            "geo_distance": {
                "distance": "5mi",
                "coordinates": "32.798913, -79.998085"
            }
        }]
    }
}

}

1 个答案:

答案 0 :(得分:0)

嵌套非常重要。在上面的代码中,shouldmust并存;因此,它的功能类似于"找到像托马斯这样的姓氏或者在查尔斯顿居住5mi的人#34;。以下内容将geo_point查询作为兄弟与任何其他must子句嵌套。

"找到像Thomas一样的姓氏(在查尔斯顿的5mi或亚特兰大的5mi等等。"

  {
  "sort": [{
      "_score": {
          "order": "desc"
      }
  }],
  "query": {
      "bool": {
          "must": [{
                  "query_string": {
                      "default_field": "lastName",
                      "query": "Thomas"
                  }
              },
              {
                  "bool": {
                      "should": [{
                          "geo_distance": {
                              "distance": "5mi",
                              "coordinates": "32.798913, -79.998085"
                          }
                      }]
                  }
              }
          ]
      }
  }
}