【SpringCloud】微服务技术栈入门5 - ElasticSearch

ElasticSearch


倒排索引

在这里插入图片描述

倒排索引建立:对文章标题进行分词,将每个词存入 term,这些词也对应一个 id 也就是文档

倒排索引检索:假设我们搜索华为手机

  1. 分词:“华为”“手机”
  2. 从数据库中找到对应的两个 key,及其文档 id
  3. 由于文档 id 分别是 2,3 以及 1,2;可见文档 id=2 重合度最高,最符合搜索条件,则搜索结果他会排在最前面
  4. 搜索结果存入结果集

环境配置

首先你需要下载下面三个东西(这边选择 7.8 版本是为了兼容低版本 JAVA,高版本的 ES 必须要高版本 JDK,十分不方便)

  1. ElasticSearch7.8.0
  2. kibana
  3. ik 分词器

注意!由于我们是在 windows 下搭建的环境,所以下载 ik 分词器时务必下载 elasticsearch-analysis-ik-7.8.0.zip 这个编译好的包,别下载源码包了!!!

三件套全部版本都必须一致!不存在什么向下或者向上兼容!


windows 下安装非常简单,把三个压缩包全部解压到一个非中文路径的目录下

先把 ik 分词器 压缩包的所有内容丢到 es7.8 根目录下的 plugins 文件夹

打开 es7.8 的 JVM 配置文件:es7.8/config/jvm.options
调节一下运行内存,否则一运行必定爆内存然后闪退

-Xms1g
-Xmx1g

大功告成,双击运行下面这两个 bat 文件即可(注意先后顺序)

  1. es根目录/bin/elasticsearch.bat
  2. kibana根目录/bin/kibana.bat

es 默认运行 9200 端口,kibana 默认运行 5601 端口


测试 ik 分词器

打开 kibana 控制台localhost:5601

点击左上角菜单,拉到最下面选择 dev tools
在这里可以随意测试我们的 es 代码,比如说插入索引和查询啥的

按照下图格式,我们使用 ik 智能分词器对一行包含汉语和英语的文字执行了分词操作

在这里插入图片描述

POST _analyze
{"text": "我再也不想学JAVA语言了","analyzer": "ik_smart"
}

添加扩展词典

网络热词不可能总是被 ik 分词器所收录,更何况是中文,所以特殊情况下我们需要添加扩展字典来帮助 ik 分词器正确识别网络新词

首先打开 ik 分词器扩展设置文件:es根目录/plugins/analysis-ik/config/IKAnalyzer.cfg.xml
把他改成下面的样子

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties><comment>IK Analyzer 扩展配置</comment><!--用户可以在这里配置自己的扩展字典 --><entry key="ext_dict">ext.dic</entry><!--用户可以在这里配置自己的扩展停止词字典--><entry key="ext_stopwords">stopword.dic</entry><!--用户可以在这里配置远程扩展字典 --><!-- <entry key="remote_ext_dict">words_location</entry> --><!--用户可以在这里配置远程扩展停止词字典--><!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

同目录下新建文件 ext.dic 用于存放扩展词,扩展词每写一个换一次行
我们可以添加以下两个扩展词

小黑子
煤油树枝
香精煎鱼
香菜凤仁鸡
梅素汁

重启 es7.8,然后再次回到我们的 kibana 界面

可见,ik 分词器成功的识别出了网络热词并执行分词操作!

在这里插入图片描述


操作索引

创建一个简单的索引只需要按照以下的代码进行简要修改即可

PUT /heima
{"mappings": {"properties": {"info":{                            // 设置字段名为"info"的映射"type": "text",                   // 设置字段类型为"text""analyzer": "ik_smart"            // 使用中文分词器"ik_smart"进行分词},"email":{                           // 设置字段名为"email"的映射"type": "keyword",                 // 设置字段类型为"keyword",表示不会进行分词"index": false                     // 设置不对该字段进行索引,即无法通过该字段进行搜索},"name":{                            // 设置字段名为"name"的映射"type": "object",                  // 设置字段类型为"object",表示是一个嵌套对象"properties": {                    // 定义嵌套对象的属性"firstname":{                    // 设置嵌套对象的属性名为"firstname"的映射"type":"keyword"                // 设置属性类型为"keyword",表示不会进行分词},"lastname":{                     // 设置嵌套对象的属性名为"lastname"的映射"type":"keyword"                // 设置属性类型为"keyword",表示不会进行分词}}}}}
}

在 dev tools 中执行完毕后的结果是

{"acknowledged": true,"shards_acknowledged": true,"index": "heima"
}

索引与文档操作

es 中索引库和 mapping 一旦创建后就无法修改,但是可以向其中添加新的字段

如下指令,向索引 heima 添加了一个新的字段叫做 age

PUT /heima/_mapping
{"properties":{"age":{"type":"keyword"}}
}

获取索引库:GET /索引库名称
删除索引库:DELETE /索引库名称


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

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

相关文章

CSS鼠标指针表

(机翻)搬运自:cursor - CSS: Cascading Style Sheets | MDN (mozilla.org) 类型Keyword演示注释全局autoUA将基于当前上下文来确定要显示的光标。例如&#xff0c;相当于悬停文本时的文本。default 依赖于平台的默认光标。通常是箭头。none不会渲染光标。链接&状态contex…

【开发篇】二十、SpringBoot整合RocketMQ

文章目录 1、整合2、消息的生产3、消费4、发送异步消息5、补充&#xff1a;安装RocketMQ 1、整合 首先导入起步依赖&#xff0c;RocketMQ的starter不是Spring维护的&#xff0c;这一点从starter的命名可以看出来&#xff08;不是spring-boot-starter-xxx&#xff0c;而是xxx-s…

微信小程序-2

微信开发文档 https://developers.weixin.qq.com/miniprogram/dev/framework/ 一、app.js中的生命周期函数与globalData(全局变量) 指南 - - - 小程序框架 - - - 注册小程序 删除app.js里的东西&#xff0c;输入App回车&#xff0c;调用生命周期 选项 - - - 重新打开此项目…

双机并联逆变器自适应虚拟阻抗下垂控制(Droop)策略Simulink仿真模型

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【Python】语言学习

之前总觉得python简单&#xff0c;不当回事&#xff0c;直到自己动手连输出都写不出来。。于是开一篇专门练python的博客。 输出 Python初相识 (educoder.net) 常规输出 print("向上&#xff1a;%.2f,向下&#xff1a;%.2f" %(pow(1.001, 365),pow(0.999, 365))) …

Go-Python-Java-C-LeetCode高分解法-第九周合集

前言 本题解Go语言部分基于 LeetCode-Go 其他部分基于本人实践学习 个人题解GitHub连接&#xff1a;LeetCode-Go-Python-Java-C 欢迎订阅CSDN专栏&#xff0c;每日一题&#xff0c;和博主一起进步 LeetCode专栏 我搜集到了50道精选题&#xff0c;适合速成概览大部分常用算法 突…

数据结构 B树 B+树 B*树 特性与规则说明 图解

文章目录 前言B树基本规则B树的数据插入&#xff08;文字描述图解&#xff09;B树数据查找B树效率分析B树的作用B树基本规则B树 与 B树对比B*树基本规则B*树 与 B树对比拓展 前言 B树基本规则 每个节点最多有m个子节点&#xff0c;其中m是一个正整数。根节点除外&#xff0c;其…

8、Docker数据卷与数据卷容器

一、数据卷(Data Volumes) 为了很好的实现数据保存和数据共享&#xff0c;Docker提出了Volume这个概念&#xff0c;简单的说就是绕过默认的联合文件系统&#xff0c;而以正常的文件或者目录的形式存在于宿主机上。又被称作数据卷。 数据卷 是一个可供一个或多个容器使用的特殊目…

echarts的bug,在series里写tooltip,不起作用,要在全局先写tooltip:{}才起作用,如果在series里写的不起作用就写到全局里

echarts的bug&#xff0c;在series里写tooltip&#xff0c;不起作用&#xff0c;要在全局先写tooltip&#xff1a;{show:true}才起作用&#xff0c;如果在series里写的不起作用就写到全局里 series里写tooltip不起作用&#xff0c;鼠标悬浮在echarts图表上时不显示提示 你需要…

三维模型3DTile格式轻量化的纹理压缩和质量关系分析

三维模型3DTile格式轻量化的纹理压缩和质量关系分析 在三维模型的3DTile格式轻量化处理中&#xff0c;纹理压缩是一个重要环节。但是&#xff0c;纹理压缩和模型质量之间存在明显的关系需要权衡。以下是纹理压缩和模型质量关系的详细分析&#xff1a; 1、压缩率与纹理质量&…

AVL树【C++】

文章目录 AVL树结点的定义Insert左单旋右单旋右左双旋左右双旋 AVL树的验证AVL树的性能完整代码 AVL树结点的定义 AVL树中的结点定义为三叉链结构&#xff0c;并在每个结点当中引入平衡因子&#xff08;右子树高度-左子树高度&#xff09; template<class K ,class V> …

openGauss学习笔记-92 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用MOT SQL覆盖和限制

文章目录 openGauss学习笔记-92 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用MOT SQL覆盖和限制92.1 不支持的特性92.2 MOT限制92.3 不支持的DDL操作92.4 不支持的数据类型92.5 不支持的索引DDL和索引92.6 不支持的DML92.7 不支持的JIT功能&#xff08;…