0

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

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

这是我的查询,尽管在我指定的经度和纬度(加利福尼亚州圣罗莎)的 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"
                }
              }
            ]
          }
        }
      ]
    }
  }
}
4

1 回答 1

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
          }
        }
      ]
    }
  }
}
于 2020-04-03T03:49:53.007 回答