ElasticSearch如何与布尔查询一起实现距离范围查询?

时间:2019-06-10 07:04:08

标签: node.js firebase elasticsearch google-cloud-functions

在ElasticSearch中,如何与普通布尔查询一起实现距离范围查询?

我要搜索范围在80 km至1600 km之间的所有文档。但是首先应该在80km处匹配,如果找不到,则将其增加到300km,然后增加到800km,依此类推直到1600km。

我正在使用ElasticSearch v7.1的当前版本,并且从 geo_distance_range 查询开始删除。所以我需要知道如何指定距离的上下限范围(从-到子句)。我试图弄清楚如何在我的脑海中使用分页或聚合,但是到目前为止,人们仍然没有意识到聚合根本不是这种情况,而使用分页在ElasticSearch端给了我不受支持的错误。

我要粘贴以下代码段:

映射(人为设计)

{
  "mappings: {
    "driver_service": {
      "properties": {
        "location": {
          "type": "geo_point"
        }
      }
    }
  }
}

查询

{
  "query": {
    "bool": {
      "should": [],
      "must_not": [],
      "filter": [
          {
            "geo_distance": {
              "distance": "80km",
              "distance_type": "arc", // or "plane"
              "location": {
                "lat": // latitude value,
                "lon": // longitude value
              }
            }
          },
          {
            "geo_distance": {
              "distance": "300km",
              "distance_type": "arc", // or "plane"
              "location": {
                "lat": // latitude value,
                "lon": // longitude value,
              }
            }
          },
          {
            "geo_distance": {
              "distance": "800km",
              "distance_type": "arc", // or "plane"
              "location": {
                "lat": // latitude value,
                "lon": // longitude value,
              }
            }
          },
          {
            "geo_distance": {
              "distance": "1600km",
              "distance_type": "arc", // or "plane"
              "location": {
                "lat": // latitude value,
                "lon": // longitude value,
              }
            }
          } 
        ]
    }
  }
}

此查询能够找到具有完全匹配的经纬度的文档。但是,如果我要搜索某个地区或城市中的所有文档,则找不到匹配项。就像,如果我搜索“美国奥克兰”或“美国加利福尼亚萨克拉门托”,ElasticSearch会找到一些文档。但是,如果我尝试使用“美国加利福尼亚”或“美国”,ElasticSearch将找不到任何文档。

所以,请提出我该怎么办?预先感谢。

0 个答案:

没有答案