geo_distance不会返回任何命中的Elasticsearch

时间:2017-05-04 18:21:00

标签: elasticsearch elasticsearch-rails

此查询出现问题,当我使用geo_distance过滤器时,查询没有返回任何内容。当我删除它时,我得到了适当的结果。查询如下:

#convert all elements to string first, and then compare with '[]'. Finally use mask function to mark '[]' as na
df.mask(df.applymap(str).eq('[]'))
Out[1063]: 
                     0      1    2     3     4
0                    1  hello  NaN  None  3.14
1           2017-06-30      2    a     b   NaN
2  2016-08-14 00:00:00      x  NaN     z     w

如果有人给我一个提示,我将不胜感激。

更新 当我使用相同的查询逻辑运行Elasticsearch Ruby DSL时,我得到了正确的结果:

GET _search
{
 "query": {
  "bool": {
     "filter": {
       "geo_distance": {
          "distance": 20,
          "distance_unit": "km",
          "coordinates": [48.8488576, 2.3354223]
       }  
     },
     "must": {
        "term": {
           "_type": {
              "value": "staff"
           }
        }
     },
     "must_not": [
        {
           "term": {
              "cabinet.zipcode": {
                 "value": "75006"
              }
           }
        },
        {
           "term": {
              "next_availability_in_days": {
                 "value": "-1"
              }
           }
        }
    ]
  }
 }
}

}}

所以这真的很奇怪,我不确定ES语法中出了什么问题,但它绝对应该按预期工作。 感谢。

1 个答案:

答案 0 :(得分:0)

您输入的范围内可能没有任何内容。 尝试将"distance": 20字段增加到"distance": 500,然后检查结果。例如,这两个地理点[0,0]和[0,1]之间的距离约为138.3414KM。

另一个建议是摆脱"distance_unit"字段并放置 并将KM放在"distance"字段中,如下所示:

{
  "query": {
    "bool": {
        "filter": {
            "geo_distance": {
                "distance": "20km",
                "coordinates": [
                    48.8488576,
                    2.3354223
                ]
            }
        }
    }
  }
}