以下是我们的文档:
{
"geometry" : {
"type" : "Point",
"coordinates" : [ -87.662682, 41.843014 ]
}
}
我们希望针对同一geo_shape
字段对_geo_distance
种进行geometry
次搜索。前者需要geo_shape
种类型,而后者需要geo_point
。
这两个索引单独成功,但不在一起:
"geometry": {
"type": "geo_shape"
}
和
"geometry": {
"properties": {
"coordinates": {
"type": "geo_point"
}
}
},
到目前为止,我们已尝试过这些并且失败了:
"geometry": {
"type": "geo_shape"
},
"geometry.coordinates": {
"type": "geo_point"
},
也
"geometry": {
"copy_to": "geometryShape",
"type": "geo_shape"
},
"geometryShape": {
"properties": {
"coordinates": {
"type": "geo_point"
}
}
}
也
"geometry": {
"copy_to": "geometryShape",
"properties": {
"coordinates": {
"type": "geo_point"
}
}
},
"geometryShape": {
"type": "geo_shape"
}
有关如何正确创建此索引的任何想法?
答案 0 :(得分:4)
如果启用了脚本,那么您可以通过在映射
中指定transforms来实现它会在这些方面看到一些东西:
put test/test_type/_mapping
{
"transform": {
"script": "if (ctx._source['geometry']['coordinates']) ctx._source['test'] = ctx._source['geometry']['coordinates']",
"lang": "groovy"
},
"properties": {
"geometry": {
"type": "geo_shape"
},
"coordinates": {
"type": "geo_point"
}
}
}
答案 1 :(得分:0)
我会使用function_score_query和原始地图只使用geo_shape。 Elasticsearch文档表明scoring by distance通常比按距离排序更好。
另外请注意,您是否使用带有geo_point的geo_bounding_box签出了?我不确定您使用的是geo_shape类型,但是您可以使用边界框复制它。查看示例here。