elasticSearch快速了解

elasticSearch:经常用于搜索引擎,我们用的百度搜索和github上的搜索都是用的搜索引擎,它是对输入内容进行分析,然后查询,不像数据库模糊搜索的like一样必须含用你输入的全部内容。

elasticSearch优势:支持分布式,可水平扩展;提供了restful接口,可被任何语言调用。

elasticsearch结合kibana、Logstash、Beats,是一套完整的技术栈,被称为ELK,被广泛应用于日志数据分析、实时监控等领域。我们经常用kibana提供的可视化控制台来操作elasticsearch。

elasticsearch搜索数据采用的倒排索引。我先说一下什么是正排索引。

正排索引就是:以Mysql为例,就是我们用索引根据id去查找数据。但elasticsearch是根据标题进行模糊查询。无法建立索引。如果正排索引就需要去访问每一个数据。

倒排索引:其中有俩个概念。 文档:对应的mysql表中的每一行的数据。 词条:对应一行数据的内容按词义分成的若干个词(比如:文档是:"小米手机",那词条就是:小米、手机)。

elasticSearch进行倒排索引时会把原数据库中的信息存储一份到elasticsearch中,并根据id建立索引与mysql数据库中一样(但数据结构上不一样)。然后去分词,把分好的词与对应的文档id存储起来。

然后在对词条建立唯一索引。

所以elasticsearch的工作流程是:先对搜索内容进行分词,然后根据分词去查文档id,最后就是根据文档id正常查mysql等的数据库了。

那我们应该怎么对搜索内容进行分词呢? 我们经常用ik分词器,把搜索内容分成多个词条

ik分词器有俩种模式:1、 ik_smart 智能切分,粗粒度 ;2、 ik_max_word 最细切分,细粒度(对一个词进行多种不同的切分,比如: 程序员 切分为:程序员、程序、员;)

下面让我们来通过kibana控制操作一下elasticsearch:

我是用的docker部署的,elasticsearch 8x以后的版本的api接口变化很大,目前还是用7x版本的多,所以我部署的7.12.1版本的。同样我们还需要部署kibana,kibana的版本要与elasticsearch的版本对应,同样也要用7.12.1版本。

elasticsearch容器启动命令:

XML 复制代码
docker run -d --name es -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" -e "discovery.type=single-node" -v 你的挂载目录/es-data:/usr/share/elasticsearch/data -v 你的挂载目录/es-plugins:/usr/share/elasticsearch/plugins --privileged --network hm-net -p 9200:9200 -p 9300:9300 elasticsearch:7.12.1

挂载目录,只要你觉得你能的方便找到,写哪都可以。

kibana容器启动命令:

XML 复制代码
docker run -d --name kibana -e ELASTICSEARCH_HOSTS=http://es:9200 --network=hm-net -p 5601:5601 kibana:7.12.1

注意:要把这俩个容器部署在同一个网桥下,我创建的network的名字是 hm-net 。

等都启动好后访问:https://localhost:5601 就可以进行kibana的控制台了。

登陆进去,然后点右上的 dev tools 就进入操作elasticsearch的控制台了

我们想对搜索内容进行分词的话,需要用到ik分词器,但这个分词器插件需要自己去下载。下载好直接拖进我们挂载的elasticsearch的plugins目录中就可以了。

解压后,ik分词器的文件名叫 elasticsearch-analysis-ik-7.12.1 ,直接把它拖进es-plugins目录,然后容器elasticsearch容器就行。

XML 复制代码
POST _analyze
{
  "analyzer": "ik_smart",
  "text": ""  
}

analyzer 是ik分词器的模式 模式有 ik_smart 和 ik_max_word 俩种;text 就是要分词的内容

post这行右边的三角符号,就会发送请求的命令。

随着社会网络的发展,网络上经常新出现很大新的网络用词,这些新的网络用词ik分词器就不能识别的。就比如 "传智播客,泰酷辣啊",分词器只会把它一个字一个字的分开。

但是! ik分词器提供给我们了扩展词汇的功能:我们只需要把新词汇加进去,分词器就能识别了。

让我们进入刚刚下载的ik分词器插件的目录中:

以文本编辑的形式打开图中我选中的文件,你可以根据我的填上:

其中 stopword.dir是目录中自带的,你可以直接写在这,你也可以在该目录中的stopword.dir文件中添加你想停止扩展的文字。比如"啊,呀,哦,喔等等"。

而扩展字典 ext.dir是我们自己创建的文件。在这个新创的文件中写上你要添加的文字:

然后保存退出就可以了。回到我们的kibana控制台,对"传智播客,泰酷辣啊" 进行分词,分词器就会把它们按一个词对待了。

相关推荐
P1Browser16 小时前
账号触发平台安全审核?拆解标准申诉流程与材料清单
大数据·人工智能·安全·多账号管理·指纹浏览器·账户安全·运营合规
云南新人和数采集团1 天前
云南靠谱软件开发公司选型指南:以昆明新腾科技为例
大数据·人工智能·科技
AllData公司负责人1 天前
AI大模型数据开发底座系列说明书:AllData集成DB-GPT开源项目建设 AI 多模态分析底座,涵盖模态解析/智能大屏/MCP 扩展!
大数据·数据库·人工智能·gpt·数据采集·数据接入·模态解析
Elasticsearch1 天前
过犹不及:为什么搜索结果重排序时,20 个候选结果胜过 200 个
elasticsearch
wno7041 天前
常用的Git命令清单
大数据·git·elasticsearch
YIN_尹2 天前
【git原理与使用】git基本操作及底层原理(二)
大数据·git·elasticsearch
武子康2 天前
H3-World 写了 CPU offload,为什么还不能保证塞进 48GB?
大数据·人工智能·深度学习
演艺大赏2 天前
Doris 数据导出实战:SeaTunnel、EXPORT 与 OUTFILE 性能对比及 9.5 亿行写入故障复盘
大数据
isfox2 天前
MapReduce 作业慢?别乱调参数,先找到瓶颈在哪
大数据
玩美数据2 天前
市场调研数据分析与数据集驱动的行业格局变革深度解析
大数据·人工智能