ElasticSearch之排序使用-ES常用排序方法

Elasticsearch使用篇 - 查询排序 本文介绍Elasticsearch的查询排序。 阅读详情

       在搜索系统中,最常遇到的一个需求就是排序,同时排序也是搜索引擎需要改造最多的地方。


常见排序一般有如下两类:
(1)按照相似度匹配得分排序

(2)按照指定字段排序

    相似度得分排序是系统默认的排序方式,更多时候,我们需要按照指定字段排序。lucene中,基于字段内容的排序是由FieldComparator接口来实现的,在排序中又分为单字段排序和多字段排序。在排序速度方面,数值类型排序速度最快,在lucene中数值类型的排序是由 NumericComparator 的派生类来实现,NumericComparator派生类支持 float、double、int 、long 四钟类型(日期在底层会转化为long型存储)。
     字符串类型的字段一般都需要进行搜索的,那么需要对其进行分词处理。分词处理的结果就是将该字符串解析为多个词条。在lucene层面,根据docid可以取到多个索引词条,而无论采用哪个索引词条来进行排序其实都正确。
     所以为了对字符串类型字段进行排序,需要保存整个字符串作为一个索引词条,同时为了保证该字段能够被搜索,还要保存该字符串analyzed的结果(即需要保存完整的字符串作为一个词条,同时又分词索引)。

在ES中为实现该功能,ES提供了 multi-field mapping 机制,配置通过配置即可实现字段即分词,又可排序:

"title": {  
    "type":     "string",
    "analyzer": "ansj",
    "fields": {
        "sort": {
            "type":  "string",
            "index": "not_analyzed"
        }
    }
}

通过title字段作为搜索,而用title.sort字段作为排序:

GET /_search
{
    "query": {
        "match": {
            "title": "elasticsearch"
        }
    },
    "sort": "title.sort"

}


Lucene标准语法中多字段排序:
{
  "from": 0,
  "size": 10,
  "query": {
    "query_string": {    "query": "*:*",    "default_operator": "and"  }
  },
  "sort": [

    {   

     "title.sort": { "order": "desc"   },

      "_score": {   "order": "desc"   }
    }
  ]

}

缺省字段排序:

{
  "from": 0,
  "size": 10,
  "query": {
    "query_string": {    "query": "title:test",    "default_operator": "and"   }
  },
  "sort": [
    {
      "rpgendatetime": {      "order": "desc",      "missing": "_last"     }
    }
  ]
}

使用脚本排序:

{
    "query" : {
     "query_string": {
         "query": "",
         "default_operator": "and"
          }
    },
    "sort" : {
        "_script" : {
            "type" : "number",
            "script" : {
                "inline": "doc['field_name'].value * factor",
                "params" : {
                    "factor" : 1.1
                }
            },
            "order" : "asc"
        }
    }
}

【Elasticsearch】打分策略详解与explain手把手计算 Elasticsearch打分公式的计算,ES的打分与Lucene的不同之处,如何跟explain的计算对照上,手把手教你如何手算explain分数 阅读详情

相关推荐

分布式搜索引擎之elasticsearch基本使用1

什么是elasticsearch?一个开源的分布式搜索引擎,可以用来实现搜索、日志统计、分析、系统监控等功能什么是elastic stack(ELK)?是以elasticsearch为核心的技术栈,包括beats、Logstash、kibana、elasticsearch什么是Lucene?是Apache的开源搜索引擎类库,提供了搜索引擎的核心API分词器的作用是什么?创建倒排索引时对文档分词用户搜索时,对输入的内容分词IK分词器有几种模式?ik_smart:智能切分,粗粒度。

weixin_43956070的博客 1273

Elasticsearch中如何进行排序

背景 最近去兄弟部门的新自定义查询项目组搬砖,项目使用Elasticsearch进行数据的检索和查询。每一个查询页面都需要根据选择的字段进行排序,以为是一个比较简单的需求,其实实现起来还是比较复杂的。这里进行一个总结,加深一下记忆。 前置知识 Elasticsearch是什么? Elasticsearch 简称ES,是一个全文搜索引擎,可以实现类似百度搜索的功能。但她不仅仅能进行全文检索,还可以实现PB级数据的近实时分析和精确查找,还可以作GIS数据库,进行AI机器学习,功能非常强大。

u012618599的专栏 6679

Elasticsearch 认识(二):为什么我们要用ES以及什么时候我们应该使用ES

前言 根据一段时间,断断续续的学习之后,对Elasticsearch的已经有了一定的初步了解。因此,我们就对在前文的了解上,对Es有了更加全面的看法。 我们为什么要用ES 随着对ES的接触的加深,我们便会发现。其实,ES与Mysql等持久化数据库等等,如果从存储本质上来看的话。应该是没有本质上的区别的。我们进行的操作,也只有增删查改四个基本操作。ES也不会对我们的数据,默认的进行十分漂亮的操作,帮助我们完成十分漂亮的操作。 (PS:目前为止,ES帮助最大的操作,其实仅仅只是加上高亮字段,但是这样的操作,我们

ArroGance_X的博客 8935

es(八)——排序

默认情况下,结果集会按照相关性进行排序 – 相关性越高,排名越靠前。 1. 字段值排序 下面例子中,对结果集按照时间排序,我们使用 sort 参数进行排序: 首先,在每个结果中增加了一个 sort 字段,它所包含的值是用来排序的。 在这个例子当中 date 字段在内部被转为毫秒, 即长整型数字 1411516800000 等同于日期字符串 2014-09-24 00:00:00...

qq_41386300的博客 9216

ElasticSearch 搜索、排序、分页功能

ElasticSearch 搜索、排序、分页功能

Jason World 1763

FPGA图像处理入门 ZYNQ7020 图像中值膨胀腐蚀滤波

图像处理的三种滤波 中值滤波应用较为广泛 综合膨胀和腐蚀可以实现边缘检测。

Coast_的博客 715

「干货」细说 Array 的常用操作(ES5 和 ES6)

上一篇文章「前端面试题系列8」数组去重(10 种浓缩版)中提到了不少数组的常用操作。今天,会更具体地将数组的常用操作进行归纳和汇总,以便备不时之需。每组方法都会配以示...

Micherwa Blog 285

Mamba再封神!与YOLO结合,拿下二区!好发不卷!

相比传统的YOLO改进,Mamba是新技术,两者结合尚在蓝海阶段,可发挥空间大!更为关键的是,它在检测精度和速度方面,都让以往的YOLO模型难以望其项背!比如代表模型Mamba YOLO,便在参数减少45.5%、FLOPs减少50%的同时,精度还比YOLOv8高6.1%!这主要得益于,Mamba能够捕捉长期依赖关系,而YOLO则擅长捕捉局部特征,两者能够优势互补,且Mamba线性复杂度的特性,也有利于提高计算效率!为了让大家能够紧跟前沿发展,找到更多灵感启发,我给大家10种。

2401_88190197的博客 2507

对象 + 数组 + ES5 的数组常用方法 + 冒泡排序 + 选择排序

对象 是一个复杂数据类型 是一个无序的数据集合 是以键值对的形式在存储数据 {} 表示对象空间 :用来分隔对象的成员和值 , 用来分割多个对象成员 var obj = { name : 'Jack', age : 18 } 对象的操作 增 obj.name = 'Jack' obj['age'] = 18 删 delete obj.name delete obj['age'] 改 (原先对象中有,就是修改,没有就是添加) obj.

qq_42320263的博客 329

CST微带贴片天线设计全流程:从S11优化到辐射方向图分析

微带贴片天线是现代无线通信设备中的关键部件,其设计依赖于电磁场理论与仿真软件的结合。理解天线的基本工作原理,如谐振频率、阻抗匹配和辐射机制,是进行有效设计的基础。通过电磁仿真,工程师可以精确预测天线性能,避免传统手工计算的误差。在工程实践中,CST Studio Suite作为行业标准的三维电磁仿真工具,能够高效处理复杂的边界条件与材料属性,帮助优化S11参数和辐射方向图。本文聚焦于2.4GHz Wi-Fi频段微带贴片天线的完整设计流程,详细解析了端口设置、网格划分等关键步骤,并针对常见的仿真失败问题提供了

weixin_30784501的博客 459

逆向实战:手把手教你分析Google DroidGuard虚拟机的加密与反调试(附Python脚本)

本文深入解析Google DroidGuard虚拟机的加密机制与反调试策略,提供从环境配置到逆向分析的完整实战指南。通过IDA Pro、Frida等工具链,详细剖析DroidGuard的信号拦截、内存校验等保护机制,并附Python脚本实现自动化分析,助力Android安全研究人员突破GMS核心组件的安全防护。

weixin_32428571的博客 313

javascript语言规范,js es6常用方法

大家好,小编来为大家解答以下问题,javascript语言规范,js es6常用方法,现在让我们一起来看看吧!

神经网络爱好者 77

设计四翼无人机(Quadcopter)的自主降落控制算法

为四翼无人机建立动力学模型,包括其姿态(Pitch, Roll, Yaw)和位置(X, Y, Z)的变化。可以使用Aerospace Blockset中的预制模块,或者根据具体需求构建自定义模型。示例:简化动力学模型利用块模拟四翼无人机的基本行为,确保模型能够反映电机输出如何影响姿态和位置变化。

amy_mhd的博客 242

es的function_score

Elasticsearch的function_score是一个强大的分数计算器,允许自定义文档评分逻辑来影响搜索结果排序。它通过以下流程工作:执行原始查询→应用可选过滤→计算新分数→组合分数→最终排序。核心参数包括基础查询、评分函数数组、分数组合模式等。常用评分函数有四种:weight函数实现简单加权;field_value_factor基于数值字段计算;decay functions实现时间/空间衰减;script_score支持脚本自定义复杂逻辑。这些函数可单独或组合使用,适用于业务规则优先、个性化推荐

weixin_44055527的博客 1109

Image Sensor卷帘曝光(Rolling Shutter)基本原理以及对曝光行的通俗理解

由于CMOS sensor的曝光方式是一行一行的方式进行的,任何一个pixel的曝光时间是一样的,也就是同一行上的每个pixel的曝光开始点和曝光的时间都是一模一样的,所以同一行的所有点所接受到的能量是一样的,而在不同行之间虽然曝光时间都是一样的,但是曝光的开始点是不同的,所以不同行之间所接受到的能量是不一定相同的。至此完成了这一行的曝光。还是以桶装水为比喻: 排成一行的桶(桶的数量和每个桶的大小确定),每一曝光行为单位的时间内每一个桶加水都是一样,需要多少个曝光行才能使的所有水桶加起来的水达到1L。

大熊 3929

使用 MATLAB/Simulink 对基于同步发电机的双机系统进行建模,并对其在短路故障条件下的暂态稳定性进行仿真和分析

双机系统(Two-Machine System)是电力系统中用于研究动态稳定性和控制策略的一个典型模型。它由两台同步发电机通过输电网络相互连接,模拟实际电网中的互联操作。当发生短路故障时,系统的暂态稳定性会受到挑战,可能导致发电机失步或电压崩溃。本教程将带你使用 MATLAB/Simulink 对基于同步发电机的双机系统进行建模,并对其在短路故障条件下的暂态稳定性进行仿真和分析。

amy_mhd的博客 8507

ElasticSearch篇——初始、认识、拿下ElasticSearch,一篇文章带你入门ES,涵盖ES概念,对比Solr,ES核心概念以及常见工具head、kibana安装和使用,保姆级教程!!!

一、学习背景曾经,如果我们在网页上查询某些数据,在输入框中输入部分内容,后台默认可能是通过SQL的模糊查询进行操作的。但是在现今的大数据时代,有几百万条数据,那么常规的模糊查询就非常的缓慢了,慢慢的演进出来了索引,但是还是达不到大数据的要求。那么,就有必要学习一款分布式全文搜索引擎。那么ElasticSearch主要功能就是搜索,如果在某个网站上需要用到搜索功能基本上都是用的ElasticSearch二、ES的起源。

我热爱学习,也乐于分享。无论是科技前沿的洞见,还是生活中的小技巧,我都会在这里与你分享。我相信,知识就是力量,而分享则能让这份力量得到更好的传递。 8万+

Swin Transformer 与 CNN 结合实现图像分类

Swin Transformer 与 CNN 结合实现图像分类。(含swin transformer 结构讲解,cnn网络搭建,代码)

这里是Mae。 5027

ElasticSearch全文搜索引擎

Lucene是apache下的一个开源的全文检索引擎工具包(一堆jar包)。它为软件开发人员提供一个简单易用的工具包(类库),以方便的在小型目标系统中实现全文检索的功能。Lucene适用于中小型项目 ,ES适用于中大型项目(它底层是基于lucene实现的)虽然全文搜索领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。但是,Lucene只是一个库。

2201_75971147的博客 3235

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

分布式搜索引擎 elasticsearch

分布式搜索引擎 elasticsearch 第一部分 1.初识elasticsearch 1.1.了解ES 1.1.1.elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 例如: 在GitHub搜索代码 在电商网站搜索商品 在百度搜索答案 在打车软件搜索附近的车 1.1.2.ELK技术栈 elasticsearch结合kibana、Logstash、Beats,也就是elasti

KYGALYX的博客 3866

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

分布式搜索引擎ES-elasticsearch入门

正排索引:相当于文档中的一条条记录;例子:汉语值得学习;汉语是语言;汉语学习视频;倒排索引:起源于实际应用中需要根据属性的值来查询记录。这种索引表的每一项都包括一个属性值和包含该属性值得各个记录地址。由于不是根据记录来确定属性,而是根据属性来确定记录的位置。可以记录文档的ids,词频跟位置例子:汉语值得学习;汉语是语言;汉语学习视频;单词文档ids词频TF;位置POS汉1,2,3语1,2,3值得11:1:<3>学习1,3是21:1;<3>言2。

TOMORROW6COME的博客 2051

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

上一篇: Elasticsearch之高亮进阶-高性能高亮器, 让Elasticsearch飞一会儿
下一篇: ElasticSearch之高亮使用-plian、postings 、fvh 实现原理、差异
tiger_njit
博客等级 码龄18年 22粉丝 6原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值