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

Elasticseach黑马笔记

1.采用倒排索引

  • 词条(term): 按语义分成的词语

  • 文档(document):每条数据就是一个文档

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.es与mysql对比

  • ES: 面向文档存储的,一条数据就是一个文档。
  • 文档数据会被序列化json格式后存储在elasticsearch中
  • 索引(index):相同类型的文档的集合,如:订单信息(订单索引)、人员信息(人员索引)。
  • 映射(mapping): 索引中文档的约束,类似数据库中的表结构(Schema).

概念对比

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

架构

  • Mysql: 擅长事务类型操作;可以确保数据的安全和一致性。
  • Elasticsearch: 擅长海量数据的搜索、分析、计算。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.安装

4.操作索引库(类似数据库中的表)

  • mapping映射的属性
  • 索引库的CRUD
4.1.mapping映射
  • type: 字段数据类型,常见的类型:
    • 字符串:text(可分词的文本)、keyword: (精确值,例如:品牌、国家、ip地址)
    • 数值:long、integer、sort、byte、double、float
    • 布尔:boolean
    • 日期:date
    • 对象:object
  • index:是否创建索引(倒排索引),默认为true。
  • analyzer:使用哪种分词器
  • properties:该字段的子字段
4.2.索引库的CRUD
  1. 创建索引库

ES中通过Restful请求操作索引库、文档。请求内容用哪个DSL语句来表示。

**创建索引库和mapping的DSL语法如下:
**外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 查询、删除索引库

    查看:GET /索引库名称 如:GET /heima

    删除:DELETE /索引库名称 如:DELETE /heima

  2. 修改索引库

    ==ES中一般是禁止修改索引库;==但是可以添加新的字段,语法如下:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

5.文档的操作(数据的操作)

  1. 新增文档

    DSL语法:外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  2. 查询文档,DSL语法:
    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  3. 删除文档,DSL语法:
    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

 

修改文档

  • 方式一:全量修改,会删除旧文档,添加新文档

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 方式二:增量修改,修改指定字段值

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

6.RestClient操作索引库

ES提供了各种不同语言的客户端。

这些客户端的本质就是组装DSL语句;

通过http请求发送给ES。

例如:JavaRestClient

7.RestClient操作文档

  • 创建不同类型的请求对象
  • 准备参数(如果需要)
  • 发送请求
7.1.新增文档

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

 

7.2.查询文档

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

7.3.更新文档

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

7.4.删除文档

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

7.5.批量导入文档

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

 

elasticsearch搜索功能

1.DSL查询分类和基本语法

1.1.查询分类

1.2.查询的基本语法

查询三要素:查询类型、查询条件、条件值

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.3.全文检索查询

全文检索查询,会对用户输入的内容分词,常用于搜索框搜索。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.4.精确查询

一般是查询keyword、数值、日期、boolean等类型字段。

所以一般不会被分词,常见的类型:

  • term:根据词条值精确查找
  • range:根据值的范围查询

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.5.地理查询

根据经纬度查询,常见的使用场景:

  • 携程:搜索我附近的酒店
  • 滴滴:搜索我附件的出租车
  • 微信:搜索我附近的人

常见的类型:

  • geo_bounding_box:查询geo_point值落在某个矩形范围的所有文档

  • 合适一定范围的所有信息,例如:地图找房

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • geo_distance:查询到指定中心点小于某个距离值的所有文档

    附近的概念

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.6 复合(compound)查询

复合查询可以将其它简单查询组合起来,实现更复杂的搜索逻辑,例如:

  1. function score

    算分函数查询,可以控制文档相关性算分,控制文档排名。例如百度竞价

相关性算分

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可以修改文档的相关性算分(query score),根据新得到的算分排序。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.搜索结果的处理

2.1.排序

elasticsearch 支持对搜索结果的排序,默认根据相关度算分(_score)来排序。

可以排序的字段类型有:

  • keyword类型
  • 数值类型
  • 地理坐标类型
  • 日期类型外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
2.2.分页

elasticsearch 默认情况下只返回top10的数据。

如果需要更多数据就需要修改分页参数:

通过修改from、size参数来控制返回的分页结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

深度分页问题:

ES是分布式的,所以会面临深度分页问题

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
深度分页解决方案:

  • search after:分页时需要排序,原理是从上一次的排序值开始,查询下一页数据。推荐使用的方式。
  • scroll:原理将排序数据形成快照,保存在内存。官方已不推荐使用

 

总结:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.3.高亮

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

原理:

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

语法:外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

注意:

高亮查询,默认情况下,ES搜索字段必须与高亮字段一致;

但是可通过require_field_match属性配置;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

总结:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.RestClient 查询文档

3.1.快速入门

实现的3步法:

  1. 准备request
  2. 准备DSL
  3. 发送请求

通过match_all来演示基本的API:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

结果的解析:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

总结:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

 

3.2.全文检索查询

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.3.精确查询

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.4.复合查询

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.5.排序、分页、高亮
  1. 排序和分页

    搜索结果的排序和分页是与query同级的参数:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

高亮

高亮API包括请求DSL构建和结果解析2部分

DSL构建:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

实现:但是结果并没有高亮

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

高亮结果解析:高亮需要单独解析

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

 


http://www.kler.cn/a/413448.html

相关文章:

  • 【组件封装】uniapp vue3 封装一个自定义下拉刷新组件pullRefresh,带刷新时间和加载动画教程
  • 双十一线上服务调用链路追踪SkyWalking实战分析
  • 阿里发布 EchoMimicV2 :从数字脸扩展到数字人 可以通过图片+音频生成半身动画视频
  • Python基础学习-11函数参数
  • 【通俗理解】神经网络中步长缩小的奥秘:优化算法与卷积操作的影响
  • Spring Boot中配置Flink的资源管理
  • 【设计模式】【创建型模式(Creational Patterns)】之建造者模式(Builder Pattern)
  • AI助力PPT创作:从手动到智能,打造高效演示
  • 比特币libsecp256k1中safegcd算法形式化验证完成
  • Java基于SSM框架的校园综合服务小程序【附源码、文档】
  • thinkphp中对请求封装
  • matlab模糊fis文件制作
  • 《Vue零基础入门教程》第八课:模板语法
  • docker compose的安装和使用
  • el-row el-col显示失效问题修复
  • CTF之密码学(栅栏加密)
  • IntelliJ+SpringBoot项目实战(十六)--在SpringBoot中整合SpringSecurity和JWT(下A)
  • Jenkins流水线 Allure JUnit5 自动化测试
  • vue3项目搭建-4-正式启动项目,git管理
  • 如何寻找适合的HTTP代理IP资源?
  • 13 —— 开发环境调错-source map
  • 本地部署 WireGuard 无需公网 IP 实现异地组网
  • Redis中如何使用lua脚本-即redis与lua的相互调用
  • coqui-ai TTS 初步使用
  • React的基本知识:事件监听器、Props和State的区分、改变state的方法、使用回调函数改变state、使用三元运算符改变state
  • 命令行版 postman 之 post 小工具