负值之间的弹性搜索 DSL 查询范围(经度值示例)过滤器不起作用

Elastic search DSL query range between negative value (example for Longitude values) filter not working

我有一个包含客户值的索引,我需要能够过滤地图上经度值范围之间的记录。纬度过滤器有效。 我想知道它是否因为负值而没有过滤经度。

经过一番研究,我发现我可以尝试使用转义键,因为“-”可能会被错误解释。使用或不使用转义字符均无效。

我不知道还能尝试什么。任何建议将不胜感激。

示例:

不确定你的 longitude 字段的 data-type,因为 geo-point data type 不支持范围查询,如果你使用正常的整数,它会起作用,如下所示.

使用默认整数映射索引示例文档

put my-idx-number-range/_doc/4
{
  "longitutde" : -10
}
put my-idx-number-range/_doc/4
{
  "longitutde" : 20
}
put my-idx-number-range/_doc/4
{
  "longitutde" : 10
}
put my-idx-number-range/_doc/4
{
  "longitutde" : 50
}

带范围的搜索查询

POST my-idx-number-range/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "range": {
            "longitutde": {
              "gte": -73,
              "lte": 20
            }
          }
        }
      ]
    }
  }
}

和搜索结果

 "hits" : [
      {
        "_index" : "my-idx-number-range",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 0.0,
        "_source" : {
          "longitutde" : -20
        }
      },
      {
        "_index" : "my-idx-number-range",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : 0.0,
        "_source" : {
          "longitutde" : 20
        }
      },
      {
        "_index" : "my-idx-number-range",
        "_type" : "_doc",
        "_id" : "3",
        "_score" : 0.0,
        "_source" : {
          "longitutde" : 10
        }
      }
    ]