除了其他字段之外,我还有许多文档,其中还有许多与之相关联的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
}
]
}
}
}
我想念什么吗?如何仅获取与该特定城市关联的文档?
最佳答案
由于您未在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 - Elasticsearch按权重不同的几个geo_point进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53996900/