我指的是弹性搜索文档中给出的Geo Distance Query示例。
版本:5.3
根据教程,我执行此查询以在索引
中插入数据PUT /my_locations/location/1
{
"pin" : {
"location" : {
"lat" : 40.12,
"lon" : -71.34
}
}
}
然后,我只是尝试应用Geo distance查询,这也会在文档中显示。
GET /my_locations/location/_search
{
"query": {
"bool" : {
"must" : {
"match_all" : {}
},
"filter" : {
"geo_distance" : {
"distance" : "200km",
"pin.location" : {
"lat" : 40,
"lon" : -70
}
}
}
}
}
}
但是它向我显示了这个错误。 "找不到geo_point字段[pin.location]" 其他时间它向我显示了这个错误 "字段[pin.location]不是geo_point字段"。
我是否需要以不同的方式插入此记录,或者我在查询中缺少一些参数?
答案 0 :(得分:2)
谢谢@Pierre Mallet
我查看文档并得出结论,我首先需要使用geo_point数据类型创建索引。我不能在现有索引上应用数据类型。所以我的步骤就像这样
PUT gym
{
"mappings": {
"gyms": {
"properties": {
"location": {
"type": "geo_point"
}
}
}
}
}
插入包含位置的记录
PUT gym/gyms/1
{
"location" : [ -71.34, 41.12 ]
}
然后查找索引及其数据类型
GET /gym/gyms/_mapping/
您将看到该位置字段具有geo_point数据类型。然后,您可以执行查询。
GET gym/gyms/_search
{
"query": {
"bool" : {
"must" : {
"match_all" : {}
},
"filter" : {
"geo_distance" : {
"distance" : "150km",
"location" : [ -70.34, 40.12 ]
}
}
}
}
}
现在工作正常。