【问题标题】:Get all comments with nearest to furthest and vice versa location wise in ElasticSearch在 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"
        ]
    ]
],

]

这不起作用 请帮助我,我是弹性搜索的新手。谢谢

【问题讨论】:

    标签: database laravel elasticsearch geolocation latitude-longitude


    【解决方案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日...
    猜你喜欢
    • 1970-01-01
    • 2013-03-12
    • 2011-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多