我有一些文档,除了其他字段外,还有一些 geo_point
与他们有联系。我要查找与特定城市相关的所有文档。为此,我还有一个城市索引,我首先搜索它,得到一个坐标列表 _score
这是搜索的结果。现在我想把这些数据传递给文档搜索,并用找到的文档的得分乘以相应的城市得分。
假设第一个查询返回一个元组列表 [(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条答案
按热度按时间5gfr0r5j1#
因为您没有在
function_score
部分,弹性假设匹配所有查询。因此,它将返回所有文档,并为所选查询附近的文档添加增强。你应该在你的功能评分部分添加一个特定的查询,这个查询将过滤掉任何离所选城市不够近的文档。像这样的