Elasticsearch中倒排索引、分词器、DSL语法使用介绍
🍓 简介:java系列技术分享(👉持续更新中…🔥)
🍓 初衷:一起学习、一起进步、坚持不懈
🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏
🍓 希望这篇文章对你有所帮助,欢迎点赞 👍 收藏 ⭐留言 📝🍓 更多文章请点击
简介及安装请查看这篇:Elasticsearch简介及安装
文章目录
- 一、 正向索引
- 二、 倒排索引
- 三、 正向索引和倒排索引的区别
- 三、与Mysql的概念对比
- 四、分词器(粗细力度拆分)
- 4.1 原始分词器
- 4.2 IK分词器
- 4.3 安装IK分词器
- 4.3.1 在线安装`较慢`
- 4.3.2 离线安装ik插件`推荐`
- 4.4 ik分词器测试
- 4.5 IK分词器--拓展词库
- 五、mapping属性介绍
- 六、 索引库操作(类似表操作)
- 6.1 创建索引库
- 6.2 查询
- 6.3 删除
- 6.4 修改
- 七、 文档操作(类似表中每条数据操作)
- 7.1 添加
- 7.2 查询
- 7.3 删除
- 7.4 修改

一、 正向索引
基于文档id创建索引,查询时先找文档,然后判断是否包含词条
正向索引(也称为“文档索引”或“内容索引”)是将文档ID与文档内容、单词相关联的关系。这意味着可以通过文档ID获取文档的内容。在构建索引时,它的结构相对简单,建立方便且易于维护。然而,在查询时需要对所有文档进行扫描,以确保没有遗漏,这会使得检索时间大大延长,检索效率低下。
数据库Mysql采用正向索引,例如:给表中的id建立索引,如下图所示

二、 倒排索引
对文档内容分词,对词条创建索引,并记录词条所在文档信息,查询时先根据词条查询文档id,然后获取文档
倒排索引是单词到文档ID的关联关系。也就是说,通过单词可以搜索到对应的文档ID。倒排索引是搜索引擎的核心,因为它们允许我们根据关键字快速找到相关的文档。倒排索引主要由两个部分组成:单词词典(Trem Dictionary)和倒排列表(Posting List)。单词词典记录了所有的文档分词后的结果,而倒排列表则记录了单词对应文档的集合。此外,倒排索引还包含位置(Position)和偏移(Offset)信息,用于词语搜索和高亮显示。
名词介绍:
文档(document): 每条数据就是一个文档词条(term): 文档按照语义分成的词语

三、 正向索引和倒排索引的区别
正向索引:
-
优点:
- 可以给多个字段创建索引
- 根据索引字段搜索,排序速度非常快
-
缺点:
- 根据非所以呢字段,或者索引字段中的部分词条查找时,只能全表扫描。
倒排索引
-
优点:
- 根据词条搜索,模糊搜索时速度非常快
-
缺点:
- 只能给词条创建索引,而不是字段
- 无法根据字段做排序
三、与Mysql的概念对比
Mysql: 擅长事务类型操作,可以确保数据的安全性和一致性
Elasticsearch:擅长海量数据的搜索,分析,计算

四、分词器(粗细力度拆分)
4.1 原始分词器
Elasticsearch在
创建倒排索引时需要对文档分词;`- 在搜索时,需要对用户输入内容分词`
- 但是默认的分词规则
对中文处理并不好。(如下)
我们希望按照词分

4.2 IK分词器
处理中文分词,一般会使用IK分词器GitHub地址:https://github.com/medcl/elasticsearch-analysis-ik

ik_smart :最少切分,粗粒度
ik_max_word :最细切分,细粒度
4.3 安装IK分词器
4.3.1 在线安装较慢
# 进入容器内部docker exec -it es /bin/bash# 在线下载并安装./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip#退出exit#重启容器docker restart es# 查看es日志docker logs -f es
4.3.2 离线安装ik插件推荐
因为根据上篇Elasticsearch简介及安装中我们知道,我们的插件数据卷为:es-plugins
- 因此,通过下面命令查看:查看数据卷目录
docker volume inspect es-plugins - 目录被挂载到了:
/var/lib/docker/volumes/es-plugins/_data这个目录中。 - 将下载的ik分词器文件(GItHub地址中下载或者
到我的主页中的资源进行下载)放到该目录下 - 重启容器
# 重启容器 docker restart es # 查看es日志 docker logs -f es
4.4 ik分词器测试
ik_smart 分词器最少切分,粗粒度

ik_max_word 分词器最细切分,细粒度

4.5 IK分词器–拓展词库
比如我想实现让上图中的text字段的空间文化分成一个词语
首先我们来看下ik分词器的词库如何配置
-
和上文中一样先查看ik分词器安装的位置
docker volume inspect es-plugins -
打开IK分词器config目录:

-
只需要修改一个ik分词器目录中的config目录中的ilAnalyzer.cfg.xml文件即可
` -
拓展词典和停止词典在当前配置文件的所在目录 在ext.dic文件中(没有新建即可),添加想要的拓展词语即可;
停止词典同理一样

- 最后重启es
docker restart es# 查看 日志 docker logs -f es- 测试发现成功

五、mapping属性介绍
Mapping(映射)是索引文档的约束,例如:字段数据类型约束,等等
文档地址:https://www.elastic.co/guide/en/elasticsearch/reference/7.17/getting-started.html


六、 索引库操作(类似表操作)
6.1 创建索引库
上述有介绍其含义,例如:type为text可分词,keyword精确值也就是不可分词
put /student
{"mappings": {"properties": {"info": {"type": "text","analyzer": "ik_smart"},"email": {"type": "keyword","index": false},"name": {"properties": {"firstName": {"type": "keyword"},"lastName": {"type": "keyword"}}}}}
}
创建成功

6.2 查询
GET /索引库名

6.3 删除
DELETE /索引库名

6.4 修改
以后字段类型不可修改,只能新增字段
再次查看成功添加

七、 文档操作(类似表中每条数据操作)
7.1 添加
post /student/_doc/1
{"info": "我爱学习","email": "asfdasfdd.@163.com","name": {"firstName": "关","lastName": "羽"}
}

7.2 查询

7.3 删除

发现删除成功了

7.4 修改
方式一:全量修改,会删除旧文档,添加新文档
那么存在为修改,不存在时为新增


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

![]()

相关文章:
Elasticsearch中倒排索引、分词器、DSL语法使用介绍
🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢…...
rabbitmq笔记-rabbitmq进阶-数据可靠性,rabbitmq高级特性
消息何去何从 mandatory和immediate是channel.basicPublish方法的两个参数,都有消息传递过程中不可达目的地时将消息返回给生产者的功能。 mandatory参数 true:交换器无法根据自身的类型 和路由键找到符合条件的队列,rabbitmq调用Basic.Re…...
【笔记】判断两个String字符串是否相同(考虑字符串为null的情况)
判断两个字符串是否相同,可用于判断一个字段在逻辑处理前后,值是否有变化。 其中重点是要考虑两个字符串是否有为null的情况,如果其中一个,或者两个都为空,用str1.equals(str2)直接判断,就会报NullPointer…...
【校招VIP】java语言考点之多线程NIO
考点介绍 多线程&NIO考点是校招面试中的常制点之一。 Java NIO是new IO的简称,是一种可以替代Java 10的一套新的IO机制。它提供了一套不同于Java标准1O的操作机制,严格来说,NIO与并发并无直接关系,但是使用NIO技术可以大大提高…...
JVM知识点(一)
1、JVM基础概念 (1)JVM、JRE、JDK JRE:JVM基本类库组成的运行环境就是JRE。JVM自己是无法完成一次编译,处处运行的,需要有一个基本类库告诉JVM如何操作运行,如如何操作文件,连接网络等&#x…...
网页接口导入postman进行接口请求
postman版本:v10.17.4 一、拷贝接口信息 网页打开开发者工具-networkk,在网页上请求一次接口,鼠标指在接口上,点击鼠标右键-copy-copy as cURL(bash) 二、导入postman 打开postman,点击import-Raw text,…...
【Leetcode】124.二叉树中的最大路径和(Hard)
一、题目 1、题目描述 二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一个二叉树的根节点 root ,返回其…...
django自动创建model数据
目前使用的环境:django4.2.3,python3.10 django通过一些第三方库,可以轻易的自动生成一系列的后台数据。 首先先创建一个数据库: 然后,在setting.py中就可以指定我们新创建的数据库了。 DATABASES {default: {ENGI…...
vscode 远程连接
这里记录的是修改ssh配置文件的方式远程连接服务器中的docker服务器 假如已经创建好了docker,并已经启动 1. config ssh in dev container 在/etc/ssh/sshd_config中修改 PermitRootLogin in 把 PermitRootLogin prohibit-password 修改为 PermitRootLogin yes …...
Error running ‘Tomcat 8.5.29‘ Address localhost:1099 is already in use
一、Error running ‘Tomcat 8.5.29’ Address localhost:1099 is already in use 原因:端口1099被占用了。 二、解决 2.1 解决方法一-结束该端口1099占用 //1-查看端口占用,根据端口号1099,获取PID(进程ID) netstat -ano | findstr "…...
后端面试话术集锦第 七 篇:nginx面试话术
🚗后端面试集锦目录 💖后端面试话术集锦第 1 篇:spring面试话术💖 💖后端面试话术集锦第 2 篇:spring boot面试话术💖 💖后端面试话术集锦第 3 篇:spring cloud面试话术💖 💖后端面试话术集锦第 4 篇:ElasticSearch面试话术💖 💖后端面试话术集锦第 5 …...
leetcode算法题--使子序列的和等于目标的最少操作次数
原题链接:https://leetcode.cn/problems/minimum-operations-to-form-subsequence-with-target-sum/description/ 视频讲解:https://www.bilibili.com/video/BV1Em4y1T7Bq?t1456.1 这题是真的难。。 func minOperations(nums []int, target int) int…...
服务器部署前后端项目-SQL Father为例
hello~大家好哇,好久没更新博客了。现在来更新一波hhh 现在更新一下部署上的一些东西,因为其实有很多小伙伴跟我之前一样,很多时候只是开发了,本地前后端都能调通,也能用,但是没有部署到服务器试过&#x…...
LiveNVR监控流媒体Onvif/RTSP功能-支持语音对讲支持非国标摄像头SDK语音对讲GB28181级联国标平台非国标转国标语音对讲
LiveNVR支持语音对讲支持非国标摄像头SDK语音对讲GB28181级联国标平台非国标转国标语音对讲 1、确认摄像头是否支持对讲2、摄像头视频类型复合流3、通道配置SDK接入4、视频广场点击播放5、相关问题5.1、如何配置通道获取直播流?5.2、如何GB28181级联国标平台&#x…...
爬虫selenium获取元素定位方法总结(动态获取元素)
目录 元素 查看元素信息 元素定位 通过元素id定位 通过元素name定位 通过xpath表达式定位 绝对路径 相对路径 通过完整超链接定位 通过部分链接定位 通过标签定位 通过类名进行定位 通过css选择器进行定位 id选择器 class选择器 标签选择器 属性选择器 定位带…...
JVM下篇知识
第01章:概述篇 第02章:JVM监控及诊断工具-命令行篇 第03章:JVM监控及诊断工具-GUI篇 第04章:JVM运行时参数 第05章:分析GC日志...
HBase客户端的批量写缓存BufferedMutator
HBase数据刷写 之前提到过这个方法,那么BufferedMutator是什么?又应该如何实现呢? 写缓存 HBase的每一个put操作实际上是一个RPC操作,将客户端的数据传输到服务器再返回结果,这只适用于小数据量的操作,如…...
从多个角度详解map转为list
从多个角度详解map转为list 更新:2023-05-20 19:24 在Java编程中,我们经常使用map存储键值对数据,而有时我们需要把map转为list,本文将从多个方面对map转list做详细的阐述。 一、map转为list的基础方法 Java提供了多种方法将m…...
PHP用CURL发送Content-type为application/json的POST请求方法
HELLO 各位伙伴,最近一直在做项目,没有及时更新。望请见谅。 今天,给大家讲一下php请求第三方接口的时候遇到的问题,大家都知道,在请求第三方接口的时候,会要求我们用post还是get来传参 一般我们传参的时候…...
【程序猿书籍大放送:第二期】《强化学习:原理与Python实战》
🌹欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享,与更多的人进行学习交流 爱书不爱输的程序猿:送书第二期 一、搞懂大模型的智能基因,RLHF系统设计关键问答1.RLHF是什么?2.RLHF适用于哪些任务?3…...
SAP F110自动付款:从零到精通的配置全景图
1. SAP F110自动付款入门指南 第一次接触SAP F110自动付款功能时,我也被那一堆配置项搞得晕头转向。记得当时为了搞清楚银行确定逻辑,整整花了两天时间反复测试。现在回想起来,如果有个系统性的指导手册,至少能节省一半时间。F110…...
卷积神经网络在图像分类中的历史(1989 年至今)
原文:towardsdatascience.com/the-history-of-convolutional-neural-networks-for-image-classification-1989-today-5ea8a5c5fe20?sourcecollection_archive---------5-----------------------#2024-06-28 深度学习和计算机视觉领域最伟大创新的视觉之旅。 https…...
Unity 2019.4.7f1实战:从零复刻Flappy Bird,搞定PC/Web/Android三端发布
Unity 2019.4.7f1实战:从零复刻Flappy Bird,搞定PC/Web/Android三端发布 当你第一次打开Unity时,面对那个空荡荡的3D场景,可能会有些不知所措。但别担心,今天我们就用这个看似简单的Flappy Bird游戏,带你走…...
避开这些坑!ISCE2数据下载实战:Earthdata账号、.netrc配置与DEM自动拼接
ISCE2数据下载实战:Earthdata账号配置与DEM自动拼接避坑指南 当你第一次尝试用ISCE2处理哨兵数据时,可能会被各种数据下载问题搞得焦头烂额。Earthdata认证失败、DEM下载报错、脚本运行异常——这些看似简单的问题往往会让整个项目停滞数天。本文将分享…...
Linux 下用火焰图进行性能分析
软件的性能分析,往往需要查看 CPU 耗时,了解瓶颈在哪里。火焰图 (flame graph) 是性能分析的利器。 1. 火焰图简介 很多人感冒发烧的时候,往往会模仿神农氏尝百草的路子:先尝尝抗病毒的药,再试试抗细菌的药ÿ…...
Veil-Evasion核心模块深度解析:从控制器到Payload生成
Veil-Evasion核心模块深度解析:从控制器到Payload生成 【免费下载链接】Veil-Evasion Veil Evasion is no longer supported, use Veil 3.0! 项目地址: https://gitcode.com/gh_mirrors/ve/Veil-Evasion Veil-Evasion是一款专业的免杀payload生成工具&#x…...
RabbitMQ-C测试框架深度解析:单元测试、集成测试与模糊测试
RabbitMQ-C测试框架深度解析:单元测试、集成测试与模糊测试 【免费下载链接】rabbitmq-c RabbitMQ C client 项目地址: https://gitcode.com/gh_mirrors/ra/rabbitmq-c RabbitMQ-C是一个功能强大的RabbitMQ C客户端库,为确保其稳定性和可靠性&…...
独立开发者如何利用TaotokenTokenPlan降低项目试错成本
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 独立开发者如何利用Taotoken TokenPlan降低项目试错成本 对于独立开发者或小型团队而言,启动一个涉及大模型能力的项目…...
BLE GATT客户端开发实战:从服务发现到数据解析
1. 项目概述与核心概念解析在物联网和可穿戴设备领域,蓝牙低功耗(BLE)技术因其低功耗和标准化协议栈,已成为短距离无线通信的首选方案。其核心通信模型基于GATT(通用属性配置文件),这是一种结构…...
Seraphine终极指南:免费开源英雄联盟智能助手完整教程
Seraphine终极指南:免费开源英雄联盟智能助手完整教程 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 在英雄联盟的激烈对局中,你是否曾因错过对局接受而懊恼?是否在BP阶段…...

