elasticsearch - Elasticsearch按权重不同的几个geo_point进行过滤

标签 elasticsearch geo

除了其他字段之外,我还有许多文档,其中还有许多与之相关联的geo_point。我想查找与特定城市关联的所有文档。为此,我还有一个城市索引,我首先对其进行搜索,然后从该搜索中获得带有_score的坐标列表。现在,我想将该数据传递给文档搜索,然后将找到的文档的分数乘以相应的城市分数。

假设第一个查询返回一个像[(city_coords, city_score), (...)]这样的元组列表,我想使用function_scorefunctions数组将查询建立到文档索引,每个城市作为一个单独的函数及其单独的得分。

但是,当我以最简单的形式构造查询时,它将获取索引中的所有文档。这是我所做的查询:

{
    '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/

相关文章:

java - elasticsearch:返回总页数不正确

templates - 创建适用于ElasticSearch中所有索引模板的正确方法

elasticsearch - Nest MultiMatch 字段提升

r - gtrendsR geo MSA/区号

java - FusedLocationApi.getLastLocation 始终返回 null(android 6.0,api 23)

ios - GDAL - 将图像扭曲到倒置的 y 轴坐标系 (Apple MapKit) 使图像颠倒

python - 海上距离计算器,中间坐标?

ruby-on-rails - 使用 Ruby Searchkick 的多个搜索词

java - Logstash JDBC 输入插件执行失败,第 9 行第 60 列出现错误 : Expected one of#, {, }

r - 计算R中具有不同原点和范围的2个栅格层之间的重叠区域