当前位置: 首页 > news >正文

09.Elasticsearch应用(九)

Elasticsearch应用(九)

1.搜索结果处理包括什么

  • 排序
  • 分页
  • 高亮
  • 返回指定字段

2.排序

介绍

Elasticsearch支持对搜索结果排序,默认是根据相关度算分来排序

支持排序的字段

  1. keyword
  2. 数值
  3. 地理坐标
  4. 日期类型

排序语法

GET /[索引名称]/_search
{"query":{"match_all":{}},"sort":[{"字段名称":"desc"}]
}
GET /[索引名称]/_search
{"query":{"match_all":{}},"sort":[{"_geo_distance":{"字段名称":"维度,经度","order":"asc","unit":"km"}}]
}

注意

  1. 排序分为:asc,desc
  2. 地理坐标字段排序和其他字段的排序语法不一样
  3. 可以根据多个字段排序
  4. 做了排序就没有相关性算分了

3.分页

介绍

Elasticsearch默认情况下只返回TOP10的数据。而如果查询更多数据就需要修改分页参数了

排序语法

GET /[索引名称]/_search
{"query":{"match_all":{}},"from":990, // 分页开始的位置,默认为0"size":10, // 获取多少条"sort":[{"price":"asc"}]
}

默认分页限制

from + size的结果必须小于或等于10000,否则会出现异常,虽然可以通过配置解除这个i限制,但是不建议这么做,建议采用其他方式解决

ES与分页

ES底层是倒排索引,它的结构是不利于做分页的,ES采用的实际上是一种逻辑上的分页,如果获取990-1000的数据,那么ES会排序获取前1000条数据,然后截取990-1000,在集群环境下会出现深度分页问题

深度分页

深度分页问题

在这里插入图片描述

解决方案
  1. search after: 分页时需要排序,原理是从上一次的排序值开始,查询下一页数据。官方推荐使用的方式。问题是只能向后查,不能向前查
  2. scroll: 原理是将排序数据形成快照,保存在内存。官方已经不推荐使用

scroll语法

# 1m,说明采用游标查询,保持游标查询窗口一分钟
GET /[index]/_search?scroll=1m
{"query":{"match_all":{}},"size":20
}
GET /_search/scroll
{"scroll":"1m","scroll_id":"返回的id"
}

分页总结

在这里插入图片描述

4.高亮

介绍

就是在搜索结果中把搜索关键字突出显示

在这里插入图片描述

原理

  1. 将搜索结果中的关键字用标签标记出来
  2. 在页面中给标签添加CSS样式

排序语法

GET /[索引名称]/_search
{"query":{"match":{"字段名称":"值"}},"highlight":{"fields":{ // 指定要高亮的字段"字段名称":{"fragment_size":100, // 返回高亮数据的最大长度"number_of_fragments":5, // 返回结果最多可以包含几段不连续的文字"pre_tags":"<em>" // 用来标记高亮字段的前置标签"post_tags":"</em>" // 用来标记高亮字段的后置标签"require_field_match":"false" // 高亮字段是否需要跟搜索字段匹配}}}
}

注意

  1. 要使用高亮,那么查询一定不能使用类似于match_all的查询,需要使用带关键字的查询,因为高亮是给关键字高亮的
  2. 默认情况下,ES搜索字段必须与高亮字段一致

5.返回指定字段

GET /[index]/_search
{"query":{"match_all":{}},"_source":["字段名1","字段名2"]
}
http://www.lryc.cn/news/288645.html

相关文章:

  • ROS2常用命令工具
  • Linux之快速入门
  • C语言——操作符详解1
  • C++学习| QT快速入门
  • Android App开发-简单控件(1)——文本显示
  • [GYCTF2020]Ezsqli1
  • 【npm包】如何发布自己的npm包
  • 《WebKit技术内幕》学习之十五(2):Web前端的未来
  • 【教学类-综合练习-11】20240116 大4班 最后一次
  • 【阻塞队列】阻塞队列的模拟实现及在生产者和消费者模型上的应用
  • Cocos Creator使用VS Code调试代码配置
  • 【投稿优惠|EI优质会议】2024年材料化学与清洁能源国际学术会议(IACMCCE 2024)
  • ubuntu设置右键打开terminator、code
  • PHP AES加解密:用代码为数据加上保护的盾牌
  • Socket实现服务器和客户端
  • 智能GPT图书管理系统(SpringBoot2+Vue2)、接入GPT接口,支持AI智能图书馆
  • 面试经典 150 题 ---- 合并两个有序数组
  • 防火墙在企业园区出口安全方案中的应用(ENSP实现)
  • 单片机学习笔记---矩阵键盘密码锁
  • 8-小程序数据promise化、共享、分包
  • [HTML]Web前端开发技术18(HTML5、CSS3、JavaScript )HTML5 基础与CSS3 应用——喵喵画网页
  • Threejs 展示——obj 格式模型导入
  • 深入浅出 diffusion(3):pytorch 实现 diffusion 中的 U-Net
  • C#使用RabbitMQ-2_详解工作队列模式
  • Day37 56合并区间 738单调递增的数字 968监控二叉树
  • 【Android】在WSA安卓子系统中进行新实验性功能试用与抓包(2311.4.5.0)
  • 【服务器】服务器的管理口和网口
  • 一个小例子,演示函数指针
  • python12-Python的字符串之使用input获取用户输入
  • 【代码随想录-数组】移除元素