尝试从索引中的记录动态搜索纬度时,我得到了非法的纬度值。在查看索引时,我看不到任何无效的纬度和经度值,因此我猜测这是我的代码中的错误。

确切的错误;

{"type":"query_parsing_exception","reason":"illegal latitude value [269.99999983236194] for [geo_distance]","index":"addresses","line":1,"col":172}}]},"status":400}

搜索的模型代码;
def self.search(query)
    __elasticsearch__.search(
        {
            query:{
                multi_match: {
                    query: query,
                    fields: ['full_address']
                }
            },
            filter:{
                geo_distance:{
                    distance: "6miles",
                    location: "address.location"
                }
            }
        }
    )
end

映射;
{ "addresses" : {
"mappings" : {
  "address" : {
    "properties" : {
      "county" : {
        "type" : "string"
      },
      "full_address" : {
        "type" : "string"
      },
      "location" : {
        "type" : "geo_point"
      }
    }
  }
}

}
}

最佳答案

我今天遇到了同样的错误,但是经度却很高。证明Elasticsearch 2.0版及更高版本仅允许范围-180..180的经度值。

例如,版本1.7.5(我在本地环境中使用的版本)在-180..180和0..360范围内均可使用。

您的错误状态:



对于纬度,仅允许使用-90..90范围内的值。

唯一的解决方法是在将经度/经度值发送到Elasticsearch之前重新计算它们。例如,对于经度,您可以执行以下操作:

((longitude.to_f + 180) % 360) - 180

关于ruby-on-rails - elasticsearch rails-非法的纬度值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34907078/

10-11 07:57