在 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 中获取最近到最远的所有评论,反之亦然的主要内容,如果未能解决你的问题,请参考以下文章

Wordpress查询:将最近的帖子排序到最远的帖子

Elasticsearch5.4常见问题总结

CLLocation distanceFromLocation:返回 -1

华为机试真题 Java 实现最远足迹

华为机试真题 C++ 实现最远足迹

luogu P6247 [SDOI2012]最近最远点对 |随机化