Elasticsearch 通过几个不同权重的 geo_points 过滤
Posted
技术标签:
【中文标题】Elasticsearch 通过几个不同权重的 geo_points 过滤【英文标题】:Elasticsearch filter by several geo_points with different weights 【发布时间】:2019-05-28 13:03:18 【问题描述】:我有许多文档,除了其他字段之外,还有许多 geo_point
s 与之关联。我想查找与特定城市相关的所有文档。为此,我还有一个城市索引,我首先搜索它并从该搜索中获取带有_score
s 的坐标列表。现在我想将该数据传递给文档搜索,并将找到的文档的分数乘以相应的城市分数。
假设第一个查询返回一个像[(city_coords, city_score), (...)]
这样的元组列表,我想使用function_score
和functions
数组构建对文档索引的查询,每个城市作为一个单独的函数,具有单独的分数。
但是,当我以最简单的形式构造查询时,它会获取索引中的所有文档。这是我所做的查询:
'query':
'function_score':
'functions': [
"filter":
"geo_distance":
"distance": "1km",
"distance_type": "plane",
"points": city_coords
,
,
'weight': city_score
]
我错过了什么吗?如何仅获取与该特定城市关联的文档?
【问题讨论】:
【参考方案1】:由于您没有在 function_score
部分中指定查询,因此 Elastic 假定为 match_all 查询。因此它返回所有文档并为所选查询附近的文档添加提升。
您应该在 function_score 部分中添加一个特定查询,该查询将过滤掉任何离所选城市不够近的文档。类似的东西
"query":
"function_score":
"query":
"bool":
"should": [
"geo_distance":
"distance": "1km",
"distance_type": "plane",
"points": city_coords1
,
"geo_distance":
"distance": "1km",
"distance_type": "plane",
"points": city_coords2
,
... and so on
]
,
"functions": [
"filter":
"geo_distance":
"distance": "1km",
"distance_type": "plane",
"points": city_coords
,
,
"weight": city_score
]
【讨论】:
以上是关于Elasticsearch 通过几个不同权重的 geo_points 过滤的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot 整合 Elasticsearch,实现 function score query 权重分查询