gpt4 book ai didi

elasticsearch - 忽略距离范围外的结果

转载 作者:行者123 更新时间:2023-12-03 00:09:42 24 4
gpt4 key购买 nike

我正在与 ElasticSearch 合作开发一个处理“帖子”的应用程序。我目前正在使用 geo_point以便它将返回按与最终用户的距离排序的所有帖子。虽然这是有效的,但我还需要在系统的另一个方面工作。

帖子可以付费,例如,如果我要为帖子付费并选择“本地”作为区域范围,那么此帖子应仅向小于或等于 20 英里外的最终用户显示。

我的索引中有一个名为spotlight_range 的列,如果spotlight_range = 'Local' 并且距离> 20 英里,我是否可以创建一个查询来忽略所有记录?我需要为几个不同的聚光灯范围执行此操作。例如,区域可能是 100 英里或更短,等等。

我当前的查询看起来像这样

$params = [
'index' => 'my_index',
'type' => 'posts',
'size' => 25,
'from' => 0,
'body' => [
'sort' => [
'_geo_distance' => [
'post_location' => [
'lat' => '44.4759',
'lon' => '-73.2121'
],
'order' => 'asc',
'unit' => 'mi'
]
],
'query' => [
'filtered' => [
'query' => [
'match_all' => []
],
'filter' => [
'geo_distance' => [
'distance' => '100mi',
'post_location' => [
'lat' => '44.4759',
'lon' => '-73.2121'
]
]
]
]
]
]
];

我的索引设置有以下字段。
'id' => ['type' => 'integer'],
'title' => ['type' => 'string'],
'description' => ['type' => 'string'],
'price' => ['type' => 'integer'],
'shippable' => ['type' => 'boolean'],
'username' => ['type' => 'string'],
'post_location' => ['type' => 'geo_point'],
'post_location_string' => ['type' => 'string'],
'is_spotlight' => ['type' => 'boolean'],
'spotlight_range' => ['type' => 'string'],
'created_at' => ['type' => 'date', 'format' => 'yyyy-MM-dd HH:mm:ss'],
'updated_at' => ['type' => 'date', 'format' => 'yyyy-MM-dd HH:mm:ss']

我的最终目标不是专门搜索距离 < X 和范围 = Y,而是让它根据我指定的距离为所有类型过滤掉它们。搜索应该返回所有类型的范围,但也会根据传递给查询的用户纬度/经度过滤掉超出我为每个范围类型指定的距离的任何内容。

我一直在网上寻找解决方案,但运气不佳。

最佳答案

我会添加一个圆圈 geo_shape到文档,以 post_location 为中心并且半径对应于 spotlight_range因为您在索引时知道这两个信息。这样您就可以将其对应的“范围”编码到每个帖子中。

...
'post_location' => ['type' => 'geo_point'],
'spotlight_range' => ['type' => 'string'],
'reach' => ['type' => 'geo_shape'], <---- add this

所以一个“本地”文档在索引后看起来像这样
{
"spotlight_range": "local",
"post_location": {
"lat": 42.1526,
"lon": -71.7378
},
"reach" : {
"type" : "circle",
"coordinates" : [-71.7378, 42.1526],
"radius" : "20mi"
}
}

然后查询将包含另一个 geo_shape以选定半径的用户位置为中心,并且只会检索其 reach 的文档与查询中的圆形相交。
$params = [
'index' => 'my_index',
'type' => 'posts',
'size' => 25,
'from' => 0,
'body' => [
'sort' => [
'_geo_distance' => [
'post_location' => [
'lat' => '44.4759',
'lon' => '-73.2121'
],
'order' => 'asc',
'unit' => 'mi'
]
],
'query' => [
'filtered' => [
'query' => [
'match_all' => []
],
'filter' => [
'geo_shape' => [
'reach' => [
'relation' => 'INTERSECTS',
'shape' => [
'type' => 'circle',
'coordinates' => [-73.2121, 44.4759],
'radius' => '20mi'
]
]
]
]
]
]
]
];

关于elasticsearch - 忽略距离范围外的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41941607/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com