当前位置: 首页 > 知识库问答 >
问题:

使用elastica对基于位置的结果进行排序

邓阳炎
2023-03-14

所以基本上我要做的是,我已经在弹性搜索中插入了数据,添加了地理坐标,现在我需要做的是,能够运行一个查询,对我得到的结果进行排序,从最近到最远。

我想找到我所在州的所有商店,然后按离我当前位置最近的一家订购。

因此,给定一个名为“state”的字段和一个名为“point”的字段,这是一个数组,使用elastica保存long/lat,该查询是什么?

谢谢你能给我的任何帮助。

共有1个答案

江鹏
2023-03-14

首先,您需要将位置字段映射为类型geo_point(这需要在插入任何数据之前完成)

{
    "stores" : {
        "properties" : {
            "point" : {
                "type" : "geo_point"
            }
        }
    }
}

之后,您可以简单地按_geo_distance对搜索进行排序

{
    "sort" : [
        {
            "_geo_distance" : {
                "stores.point" : [-70, 40], // <- reference starting position
                "order" : "asc",
                "unit" : "km"
            }
        }
    ],
    "query" : {
        "match_all" : {}
    }
}

对于Elastica,请查看他们关于映射和查询构建的文档,并阅读单元测试

 类似资料:
  • 问题内容: 我在使用Elasticsearch查询时遇到问题。我希望能够对结果进行排序,但是elasticsearch忽略了排序标签。这是我的查询: 但是,当我删除查询部分并仅发送排序标签时,它就可以工作。谁能指出正确的方法? 我还尝试了以下查询,这是我所拥有的完整查询: 设定值 对应 提前致谢! 问题答案: 文档中的 “标题” 字段是一个 分析的 字符串字段,也是一个多值字段,这意味着Elast

  • 问题内容: 我在Python中有两个列表 我想对第一个列表进行排序,并使用结果对第二个列表进行排序。 换句话说,结果应为: 我知道如何分别对每个列表进行排序,但是如何使用对另一个列表进行排序所产生的索引排列来对一个列表进行排列呢? 问题答案: 施瓦兹变换

  • 目标 我想问一下这个问题: null 我想解决方案可能非常简单,就像查询本身一样,但这些是我在这种基础上迈出的第一步。提前感谢你在这方面的任何帮助。

  • 问题内容: 我正在对数据流进行一些分析,并将结果发布在Redis通道上。消费者订阅这些频道并获得实时数据馈送。所有历史数据分析结果都将丢失。 现在,我想添加在Redis中存储历史数据的功能,以便消费者可以查询此历史数据(主要是按时间)。由于分析结果是按时间划分的,将结果存储在Redis中的最佳设计是什么? 问题答案: 使用redis 排序集。 排序集基于“分数”存储数据,因此,在您的情况下,只需使

  • 问题内容: 我在解决此mongodb(猫鼬)问题时遇到很多困难。 存在此模式“推荐”(用户名,roomId,ll和日期),其集合包含对用户的推荐。 我需要获取最推荐的房间列表(按roomId)。下面是模式和我尝试过的猫鼬查询解决方案。 问题答案: 从聚合管道返回的结果只是普通对象。因此,您将排序作为流水线阶段而不是作为单独的操作进行: 因此,也可以使用多种流水线运算符 或 或 和其他东西。这些可以

  • 问题内容: 我有一个查询,用于查找按位置排序的结果。结果还必须考虑增值税,因此这也在查询中。不幸的是,该查询在未缓存时可能需要4秒钟以上的时间才能运行。谁能发现任何明显的问题或建议我做些什么来改善它? 只是为了澄清查询中正在发生的事情: 计算的距离是使用经/纬度的欧几里得距离 当包含增值税时,incvat字段用于显示价格 WHEN / THEN语句用于将价格0置于最底端 查询: 问题答案: 您可以