Elasticsearch排序

欢迎访问本人博客查看原文:http://wangnan.tech


当你发送请求至elasticsearch,返回文档默认按文档得分降序排序,这是通常我们想要了,然而,有时候我们希望能改变这种排序方式

下面的例子就容易做到:
01
该查询会返回所有在title字段上至少命中一个词项的文档,并且基于section数据排序

也可以通过添加查询sort部分的missing属性为那些section字段缺失的文档定制排序行为
02

基于多值字段的排序

某些文档的release-dates字段里面储存了多个电影上映日期(同一部电影在不同国家的上映日期不同)我们可以构造查询请求:
03
例子中es将基于每个文档的release_dates字段的最小值进行排序
mode参数可以设置为以上值:

  • min 按照该字段最小值排序
  • max 按照该字段最大值进行排序
  • avg 按照多个字段平均值排序
  • sum 按照字段总和进行排序

后面两个选项只对数值类型有效

基于多值geo字段的排序

es提供了基于多维坐标系数据的排序,我们通过一个实例了解这种类型的排序
例如,要查找特点国家里离自己最近的一个机构
我们使用下面的这个映射:
04
查询如图:
05
查询结果:
06
我们可以看到,返回结果包含这个值:“sort”:[0.0]这是因为返回文档的地理坐标和查询中的坐标精确匹配
还可以设置mode属性为max,min,avg
例如avg代表:此时基于字段中的地理位置坐标与查询坐标的距离的均值排序

基于嵌套对象的排序

继续嵌套对象的排序,对以下两种情形都适用

  • 适用了显式嵌套映射(在映射中配置type=“nested”)的文档
  • 使用了对象类型的文档
    两者之间的一些细微区别需要注意
    假设我们索引如下数据:
    07
    查询:
    08
    查询返回结果按照嵌套对象的usert字段最小值降序
    如果将子文档视为一种数据类型,则可以将查询简化为如下形式:
    09
    当我们使用对象类型时,可以简化查询,这是因为整个对象结构被当成一个lucene文档进行储存
    有些时候,使用nested_path属性会更加便捷
    按照下面的方式构造查询:
    10
    我们也可以使用nested_filter参数,改参数只对嵌套文档有效,利用这个参数,我们可以在排序前就已经通过一个过滤器在检索期排除了某些文档,而不是检索结果文档集中过滤它们
    (注:内容整理自《深入理解Elasticsearch》)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Elasticsearch中,排序问题可能出现在聚合操作中。根据引用的描述,Elasticsearch排序操作时,会先对每个分片进行排序,然后将每个分片的前17名结果进行再次聚合和排序,最终返回排序后的前5条记录作为结果。这个排序策略来源于官方给出的算式,根据算式,如果请求只发往一个分片,就返回前5条记录;如果请求发送给多个分片,每个分片返回的记录数是5 * 1.5 = 17。这个策略可能导致在返回的数据中,实际的排序结果与期望的排序结果不一致。 因此,如果你在Elasticsearch中遇到排序问题,可以检查是否涉及到了多个分片,并且了解Elasticsearch排序策略。你可以参考引用提供的链接来了解更多关于Elasticsearch排序操作的详细信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Elasticsearch聚合学习之五:排序结果不准的问题分析](https://blog.csdn.net/boling_cavalry/article/details/90319399)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [3. elasticsearch 汇总排序问题剖析](https://blog.csdn.net/wangzhiqiang123456/article/details/123073114)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值