如何处理具有负值(如经度点)的ElasticSearch范围查询

0yg35tkg  于 2022-11-02  发布在  ElasticSearch
关注(0)|答案(1)|浏览(181)

我有一个包含客户值的索引,我需要能够过滤Map上经度值范围之间的记录。纬度的过滤器工作正常。我想知道它是否因为负值而没有过滤经度。
经过一番研究,我发现我可以尝试使用转义键,因为“-”可能会被解释错误。无论有没有转义字符都不起作用。

  • 注意-在范围之间有记录,因为当我抓取整个索引时,我可以看到经度值在范围之间记录。

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

zazmityj

zazmityj1#

不确定您的longitude字段的数据类型,因为geo-point data type不支持范围查询,如果您使用正常的整数,它将工作,如下所示。

使用默认整数Map为示例文档编制索引

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
        }
      }
    ]

相关问题