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容器启动命令:

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容器启动命令:

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容器就行。

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控制台,对“传智播客,泰酷辣啊” 进行分词,分词器就会把它们按一个词对待了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/42711.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文解决:你与该网站的连接不是私密连接,存在安全隐患

访问网页时,是不是会经常遇到网站不是私密连接的提示?当浏览器提示某个网页不安全时,这通常是因为网页使用的是非加密的HTTP协议,或者其HTTPS协议的SSL/TLS证书存在问题。 通常遇到这类网站时要注意,一来是网站未与证书…

`THREE.Line` 是 Three.js 中用于创建线段的类。

demo案例 THREE.Line 是 Three.js 中用于创建线段的类。以下是 THREE.Line 的详细说明,包括构造函数参数、输出、方法和属性。 构造函数 new THREE.Line(geometry, material, mode) geometry (THREE.BufferGeometry 或 THREE.Geometry): 定义线段的几何体。mater…

概率解码:SKlearn中模型的概率预测指南

概率解码:SKlearn中模型的概率预测指南 在机器学习中,概率预测是一种评估样本属于某个类别可能性的方法。这种预测方式不仅提供了分类结果,还给出了预测的置信度。Scikit-learn(简称sklearn),作为Python中…

[图解]SysML和EA建模住宅安全系统-12-内部块图

1 00:00:00,580 --> 00:00:02,770 接下来我们来画流了 2 00:00:03,100 --> 00:00:05,050 首先第一个是站点状态 3 00:00:05,140 --> 00:00:08,130 从这里到这里,我们画一个过来 4 00:00:10,290 --> 00:00:11,890 这里流到这里 5 00:00:11,900 -->…

汉中茗茶小程序的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,基础数据管理,茶叶管理,论坛管理,公告管理,茗茶历史管理 微信端账号功能包括:系统首页,茗茶信息&#xf…

探索 WebKit 的分享新境界:Web Share Target API 的深度解析

探索 WebKit 的分享新境界:Web Share Target API 的深度解析 在移动为先的网络世界中,Web Share Target API 为 Web 应用提供了一种简单而强大的方式,允许它们成为分享目标,接收来自其他应用或 Web 应用的内容。作为众多现代浏览…

mac怎么压缩pdf文件大小,mac压缩pdf文件大小不改变清晰度

在数字化时代,pdf格式因其良好的兼容性和稳定性,成为了文档分享和传输的首选。然而,随着文件内容的丰富,pdf文件的体积也越来越大,给存储和传输带来了不小的困扰。本文将揭秘几种简单有效的pdf文件压缩方法&#xff0c…

如何优化 PostgreSQL 中对于自关联表的查询?

文章目录 一、理解自关联表查询二、分析性能问题的可能原因(一)缺少合适的索引(二)大量数据的笛卡尔积(三)复杂的查询逻辑 三、优化策略及解决方案(一)创建合适的索引(二…

OpenGL笔记七之顶点数据绘制命令和绘制模式

OpenGL笔记七之顶点数据绘制命令和绘制模式 —— 2024-07-07 杭州 下午 总结自bilibili赵新政老师的教程 code review! 文章目录 OpenGL笔记七之顶点数据绘制命令和绘制模式1.OpenGL版本号更改和编译更改2.GL_TRIANGLES模式绘制一个三角形、支持NFC坐标随窗口缩放2.1.三个点…

第二周:李宏毅机器学习笔记

第二周学习周报 摘要Abstract一、深度学习1.Backpropagation(反向传播)1.1 链式法则1.2 Forward pass(前向传播)1.3 Backward pass(向后传播)1.4 总结 2. Regression(神奇宝贝案例)2…

Redis常用命令——Set、Zset篇

文章目录 一、Set相关命令操作 SADD SMEMBERS SISMEMBER SCARD SPOP SMOVE SREM SINTER 与 SINTERSTORE SUNION 与 SUNIONSTORE SDIFF 与 SDIFFSTORE Set命令小结 二、Zset 相关命令操作 ZADD ZCARD ZCOUNT ZRANGE ZREVRANGE ZPOPMAX BZPOPMAX ZPOPMIN 与 BZPOPMIN ZRANK 与 …

MySQL事务隔离

MySQL事务隔离 前言锁共享锁(Shared Lock)排他锁(Exclusive Lock)行级锁(Row-Level Lock)表级锁(Table-Level Lock)快照读和当前读查看锁 事务事务的四个特性事务的并发问题事务的隔…

java中的jvm分为几种,各自的优缺点是什么,进来看看,必能凿壁偷光,眼前一亮

前言 Java虚拟机(Java Virtual Machine, JVM)是运行Java应用程序的核心组件,负责将Java字节码解释或编译为机器代码。不同的JVM实现提供了多种特性和性能优化,满足不同应用场景的需求。以下是一些主要的JVM实现及其各自的优缺点 …

手写深拷贝(Deep Copy)和浅拷贝(Shallow Copy)

在编程中,深拷贝(Deep Copy)和浅拷贝(Shallow Copy)是两个重要的概念,特别是在处理对象或数组时。它们的主要区别在于如何处理对象或数组中的引用类型(如对象、数组等)。 浅拷贝&am…

《Windows API每日一练》8.5 listbox控件

列表框是将一批文本字符串显示在一个具有滚动功能的方框中的控件。通过发送消息到列表框的窗口过程,程序可以添加或删除列表中的字符串。当列表框中的一个项目被选中时,列表框控件便发送 WM_COMMAND消息到其父窗口。然后父窗口确定哪个项目被选中。 本节…

2万字长文详解Ambari面试题及参考答案

目录 Ambari的主要功能是什么? Ambari如何与Hadoop生态系统中的其他组件交互? 解释Ambari中“蓝本”(Blueprints)的概念。 如何使用Ambari进行集群的监控和管理? Ambari支持哪些Hadoop版本? 在Ambari中,如何查看和管理服务日志? Ambari的安装过程涉及哪些主要步骤…

WEB开发-HTML页面更新部分内容

1 需求 2 接口 3 示例 在HTML页面中,如果你想要改变部分内容而不是整个页面,有几种方法可以实现这一目标,主要包括: JavaScript 的 DOM 操作 JavaScript允许你动态地修改HTML文档中的元素内容。你可以使用document.getElementB…

J024_打印电影的全部信息

一、需求描述 展示多部电影的信息。 电影信息包括:电影名称、电影得分、电影票价格。 二、代码实现 2.1 Movie类 package com.itheima.collection;public class Movie {//电影名称private String name;//电影得分private int score;//电影票价格private double…

11-云服务器处理单细胞转录组数据

目录 安装R及相关包 安装 shiny 进行安装包 安装BiocManager 安装Seurat包 网页端Rstudio需打开8787端口 Ubuntu上安装R包linux库缺失 关于服务器配置及相关处理可见:linux学习笔记_hx2024的博客-CSDN博客 安装R及相关包 8-阿里云服务器 ECS配置R及Studio Server-CS…

【Unity 3D角色移动】

【Unity 3D角色移动】 在Unity 3D中实现角色移动通常涉及到几个关键步骤,包括设置角色的物理属性、处理输入、更新角色的位置以及动画同步。下面是实现基本3D角色移动的步骤和示例代码: 步骤1:设置角色的物理属性 角色通常使用Character Co…