从这篇文章开始,我们要进入DSL的学习。

使用url搜索仅仅是个开始,ES还提供带有查询DSL的请求体用于更高级的搜索。在这些类型的搜索中有大量可选项,可以混合和匹配不同的选项以获得所需的结果。

DSL还能根据查询子句的过滤和查询上下文,使用筛选器的子句以布尔形式测试Document是否匹配筛选器。过滤器通常也比查询快,但是查询也可以根据Document与查询的匹配程度来计算score。

From/Size

分页可以说是最常用的一个功能了,在ES里通过使用From/Size实现结果分页。from参数定义了要获取的第一个结果的偏移量,size参数允许配置要返回的最多命中数量。

虽然可以将from和size设置为请求参数,但它们也可以在搜索体中设置。从默认值到0,大小默认值10:

GET http://localhost:9200/orders/_search

{

"from" : 0, "size" : 20,

"query" : {

"term" : { "name" : "phone" }

}

}

Sort

与分页几乎绑在一起的还有排序,ES允许在特定字段上添加一个或多个排序,每种排序也可以倒序。常见的asc和desc就不多说了,ES支持按数组或多值字段排序。mode选项控制选择哪个数组值来排序它所属的Document。mode选项可以有以下值:

1.min:选择最小值。

2.max:选择最大值。

3.sum:使用所有值的和作为排序值(只适用于基于数字的数组字段)。

4.avg:使用所有值的平均值作为排序值(只适用于基于数字的数组字段)。

5.median:使用所有值的中值作为排序值(只适用于基于数字的数组字段)。

在下面的示例中,字段price每个文档有多个价格。在这种情况下,结果命中将根据每个文档的平均价格按价格升序排序。

{

"query" : {

"term" : { "goods" : "phone" }

},

"sort" : [

{"price" : {"order" : "asc", "mode" : "avg"}}

]

}

ES还支持对位于一个或多个嵌套对象中的字段进行排序。

嵌套字段支持排序有一个嵌套排序选项,具有以下属性:

1.path:定义要排序的嵌套对象。实际的sort字段必须是嵌套对象中的一个直接字段。当按嵌套字段排序时,该字段是必须要有的。

2.filter:嵌套路径中的内部对象与之匹配的筛选器,以便通过排序来考虑其字段值。常见的情况是在嵌套的过滤器或查询中重复查询/过滤器。

3.nested:与顶级嵌套相同,但适用于当前嵌套对象中的另一个嵌套路径。

在下面的示例中,case是一个类型嵌套的字段。需要指定嵌套路径;否则,ES就不知道需要在哪个嵌套级别上捕获排序值。

{

"query" : {

"term" : { "product" : "chocolate" }

},

"sort" : [

{

"case.price" : {

"mode" : "avg",

"order" : "asc",

"nested": {

"path": "case",

"filter": {

"term" : { "case.color" : "grey" }

}

}

}

}

]

}

地理位置排序

通过_geo_distance可以实现按照按照距离长短进行排序,下面的例子就是按照pin.location作为目标地点按照距离从近到远:

{

"sort" : [

{

"_geo_distance" : {

"pin.location" : [-170, 340],

"unit" : "km",

"mode" : "min",

"distance_type" : "arc",

"ignore_unmapped": true,

"order" : "asc"

}

}

],

"query" : {

"term" : { "seller" : "phone" }

}

}

其中有几个参数需要解释下:

1.distance_type:计算距离的方式。可以是arc(弧),也可以是plane(平面,速度快,但在长距离和接近极点时不精确)。

2.mode:如果一个字段有几个地理点,默认情况下,升序排序时考虑的距离最短,降序排序时考虑的距离最长。支持的值是最小值、最大值、中值和平均值。

3.ignore_unmapped:是否应将未映射字段视为缺失值。将其设置为true相当于在字段排序中指定unmapped_type。默认为false(未映射字段导致搜索失败)。

4.unit:单位。默认是m(米)。

这篇文章主要就介绍了这两个参数。ES当然不只有这两种,只是这两种应该是最常用的,如果各位有疑问欢迎留言。

版权所属,如需转载,请注明出处:搜闲鱼

es 吗 查询必须有sort_ElasticSearch DSL之From/Size,Sort相关推荐

  1. java中使用es精准查询_使用ES简单查询语句须知

    查询样例 {"query": { //1 "bool": { ///2 "must": [{ //3 "query_string& ...

  2. 【Elasticsearch】ES 慢查询 profile 参数

    1.概述 es profile 参数类似逆向解析dsl,排查查询慢在哪? 打印出DSL,可以通过接口: searchSourceBuilder.toString() 新增profile参数,查看到底哪 ...

  3. Elasticsearch(es) 查询语句语法详解

    Elasticsearch 查询语句采用基于 RESTful 风格的接口封装成 JSON 格式的对象,称之为 Query DSL.Elasticsearch 查询分类大致分为全文查询.词项查询.复合查 ...

  4. Elasticsearch 实战 - 第四讲:ES 高级查询

    Elasticsearch 实战 - 第四讲:ES 高级查询 Elasticsearch 实战系列文章: 一.高级查询 1.简介 2.结果排序 3.分页查询 4.检索查询 5.关键字查询 6.高亮显示 ...

  5. ES(elasticsearch)查询或搜索总结

    很多写说明文档,没有总结写开头.因为文档内容又很多,你看到后面就忘记前面,没有形成结构化知识.这样知识在大脑里是离散的,不完整,不准确的. 所以我的文章都是把结论写最开始,或者要说的全部内容用一句话写 ...

  6. ES聚合查询详解(三):指标聚合

    前言 ES聚合查询主要分为3类:指标聚合.桶聚合和管道聚合. 本文主要是介绍其中指标聚合的相关使用. 一.简介 指标聚合 Metrics Aggregations 如果说桶聚合主要是用来做分组的,那么 ...

  7. es分页查询重复数据_ES优化 - 巨量数据如何提高查询性能

    问题:如果数据量特别大,如何优化ES的查询性能? 可以从以下几个方面进行思考: File Cache可用的内存: ES的查询严重依赖OS的File Cache,所以说内存分配的内存肯定是越多越好.最理 ...

  8. Es 模糊查询 match,wildcard

    Es 模糊查询的方式 要求: Es查询: 查询工单信息, 输入 "测试",查出 form_name 为字段中有查询出含有符合内容的数据 match:分词模糊查询: 比如" ...

  9. ES关键字查询-特殊符号

    项目中ES关键字查询遇到的坑,本来如果在创建关键字字段的时候就应该限制一些特殊符号的输入的,比如限制只能输入字母下划线和数字这种,不用允许输入特殊符号(@,$,*...),结果项目经理不让,说是限制了 ...

最新文章

  1. C++ Windows进程管理
  2. c# 取两个时间的间隔
  3. 独家 | 手把手教你学习R语言(附资源链接)
  4. 埃森哲为施耐德电气打造数字工厂,加速产业物联网开发
  5. Imageloader7-获取图片需要显示的大小
  6. PHP表单提交参数验证类(可修改)
  7. 【51nod】1239 欧拉函数之和 杜教筛
  8. Centos7 - mysql 5.5.62 tar.gz 方式安装
  9. 模仿百度搜索框,进行联想搜索
  10. 站长seo经过的阶段
  11. 禁用并删除 Wordpress 文章修订(revision)记录
  12. Linux内核中的jiffies及其作用介绍及jiffies等相关函数详解
  13. 计算机网络的应用领域有那些,计算机网络应用领域
  14. 固件中的单个二进制模拟:Tenda AC15 路由器 CVE-2018-5767 / CVE-2020-10987 漏洞分析与复现
  15. 职场篇(一):明哥的职场礼仪七堂课笔记
  16. 机器翻译模型简介(一)
  17. miniGUI源码分析:初始化
  18. 仪表放大器 电流的检测
  19. 打开一个英文文本文件,编写程序读取内容,将其中的小写字母转换为大写,大写字母转化为小写
  20. 计算机毕设Python+Vue学科竞赛管理(程序+LW+部署)

热门文章

  1. Java工具实现无水印批量下载
  2. Mysql8.0Mysql5.7Mysql5.6Mysql5.5特性对比
  3. php处理上传文件的步骤,php文件上传步骤
  4. php 变量 可用拼音表示,php汉字转拼音的示例
  5. count函数里加函数_PHP count()函数与示例
  6. as_hash ruby_Hash.merge(other_hash)方法与Ruby中的示例
  7. python爬取js动态网页_Python 爬取网页中JavaScript动态添加的内容(一)
  8. python—装饰器
  9. 安装gem_Python安装第三方库及常见问题处理方法汇总
  10. css background 一半_CSS小技巧