在 ElasticSearch 中获取最近到最远的所有评论,反之亦然
Posted
技术标签:
【中文标题】在 ElasticSearch 中获取最近到最远的所有评论,反之亦然【英文标题】:Get all comments with nearest to furthest and vice versa location wise in ElasticSearch 【发布时间】:2020-06-12 11:19:20 【问题描述】:我在 Laravel 中有一个应用程序,数据存储在 ElasticSearch 中。 我想在应用程序中添加两个选项
1-显示最近的 它将用于获取从(用户的)最近位置到最远位置的所有 cmets,并按位置排序。 示例 一位来自巴基斯坦的用户发表评论,另外 2 位来自印度和美国的评论。 因此,当我点击 Show Nearest 时,巴基斯坦用户的评论将排在首位,然后印度对第二个数字的评论和美国对第三个数字的评论(如果我的位置是巴基斯坦)。
2-显示最远 它将用于获取从(用户)最远位置到最近位置的所有 cmets,并按位置排序 示例 假设上面给出的例子,所以,当我点击 Show Farthest 时,美国评论将排在首位,然后印度评论第二个数字,巴基斯坦评论第三个数字(如果我的位置是巴基斯坦)。
此搜索将基于存储在 ElasticSearch 中的每条评论的纬度经度。
文件如下:
post_id(type:text), text(type:text) location(array of lat long) e.g location:[ -71.34, 41.12 ]
我的查询如下:-
[ "query"=>[ "bool"=>[ "filter"=>[ "match"=>[ "post_id" => $id ] ] ] ], "sort" => [ [ "_geo_distance" => [ "location" => [ "lat" => $lat, "lon" => $long ], "order" => "asc", "unit" => "km" ] ] ],
]
这不起作用 请帮助我,我是弹性搜索的新手。谢谢
【问题讨论】:
【参考方案1】:您可以通过 geo_distance 排序来做到这一点。 根据您要按地理距离排序的 cmets,确保您的字段属于 geo_point。
大头针是您的位置,将根据该位置计算其他位置距离
这是一个例子
GET /_search
"sort" : [
"_geo_distance" :
"pin.location" :
"lat" : 40,
"lon" : -70
,
"order" : "asc",
"unit" : "km"
],
"query" :
"term" : "user" : "kimchy"
有关此的更多详细信息以及如果您想使用更多设置,这里是一个链接:https://www.elastic.co/guide/en/elasticsearch/reference/7.3/search-request-body.html#geo-sorting
【讨论】:
如果我想检查特定帖子的 cmets,那么我应该添加必须检查以上排序吗?如果 lat long 以这种格式存储,如何在查询“坐标”中使用:[40.7387032765573,-73.9887174954924] 并告诉我大约 40 和 -70 .. 会不会是用户 lat long 谁会点击选项? 是的,这将是用户的纬度,他想在他们周围看到 cmets 对于查询,您只需向其添加匹配查询:elastic.co/guide/en/elasticsearch/reference/current/… 但是上面的查询不是根据我的需要...因为你是根据 lat long 排序的,这不符合我的需要,例如我希望巴基斯坦在 1 日发表评论,印度在 2 日发表评论美国3日...以上是关于在 ElasticSearch 中获取最近到最远的所有评论,反之亦然的主要内容,如果未能解决你的问题,请参考以下文章