【问题标题】:How to use geo_distance filter as OR condition in Elasticsearch 7.x?如何在 Elasticsearch 7.x 中使用 geo_distance 过滤器作为 OR 条件?
【发布时间】:2020-07-14 23:04:36
【问题描述】:

我正在使用 Elasticsearch 7.6 并尝试运行一个运行 geo_distance 查询的查询,以在本例中 25 英里的距离范围内找到确切城市内的匹配文档。

通俗地说,就是“搜索加利福尼亚州圣罗莎市或其周围 25 英里范围内的所有工作岗位。如果在加利福尼亚州圣罗莎市 25 英里范围内有工作岗位,则应返回这些文件除了“job_location”字段专门为“加利福尼亚州圣罗莎”的任何工作之外,在搜索结果中

这是我的查询,尽管在我指定的经度和纬度(加利福尼亚州圣罗莎)的 25 英里范围内有匹配的文档,但它返回 0 个结果。

我一定是语法错误。

{
  "query": {
    "bool": {
      "filter": {
        "geo_distance": {
          "distance": "25 miles",
          "geo_location": "38.440429,-122.7140548"
        }
      },
      "must": [
        {
          "match": {
            "active": true
          }
        },
        {
          "bool": {
            "should": [
              {
                "term": {
                  "job_location": "Santa Rosa, CA"
                }
              }
            ]
          }
        }
      ]
    }
  }
}

【问题讨论】:

    标签: elasticsearch elasticsearch-query elasticsearch-7


    【解决方案1】:

    您的查询未正确构建。像这样尝试,它应该可以按您的预期工作。 OR条件都应该在bool/should:

    {
      "query": {
        "bool": {
          "minimum_should_match": 1,
          "should": [
            {
              "term": {
                "job_location": "Santa Rosa, CA"
              }
            },
            {
              "geo_distance": {
                "distance": "25m",
                "geo_location": "38.440429,-122.7140548"
              }
            }
          ],
          "filter": [
            {
              "match": {
                "active": true
              }
            }
          ]
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-24
      • 1970-01-01
      • 2011-12-25
      • 1970-01-01
      • 1970-01-01
      • 2016-05-26
      • 2023-01-24
      • 2018-06-18
      相关资源
      最近更新 更多