[ES]一基础|正排索引和倒排索引 | ES和MySQLd的对比 | 默认分词器 | IK分词器 | 扩展、停用ik分词器的词库

本文主要是介绍[ES]一基础|正排索引和倒排索引 | ES和MySQLd的对比 | 默认分词器 | IK分词器 | 扩展、停用ik分词器的词库,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考 https://www.bilibili.com/video/BV1b8411Z7w5?p=6

一、正排索引和倒排索引

1、ES采用倒排索引

1)文档(document):每条数据就是一个文档,在mysql中一个文档就是一条数据,在网页中,一个文档就是一个网页

2)词条(term):文档按照语义分成的词语(中文的话按照中文的词分、英语按照英文分)

3)存储过程:将文档从第一行开始,一行一行的进行分词,存成两个字段:词条和文档id,出现过的词条只要追加文档id即可。词条是唯一的,绝对不会重复,然后为词条创建索引。

4)查询过程:搜索华为手机,先对用户输入的内容进行分词,拿着词条去倒排索引中进行查询,因为所有的词条都已经建立索引,所以查询速度很快。查询"华为"得到文档id2和3,查询手机得到文档id1和2,因此可知道2号文档两个词条都包含。1和3文档只包含一个词。之后拿着id去查询文档。将文档放到结果集中。

查询一共进行了两次检索:第一次根据用户输入的词条去词条列表找到对应的文档id,第二次拿着文档id找文档。但每次都经过索引进行查询,查询效率比较高。

5)正向索引与倒排索引

正向索引一行一行的从上到下遍历文档,通过文档中找词。

倒排索引先找到词条对应的id,再去找文档,是通过词找文档。

 二、ES和MySQL的对比

1、格式不同:ES的每行数据以json串的格式进行存储。

2、索引(index):相同类型的文档的集合。相当于MySQL中的表。

3、映射(mapping):索引中文档的字段约束信息,类似表中字段和字段的数据类型。

4、MySQL和ES的对比

三、分词器

1、默认分词器(analyzer)

可选的有standard、english、chinese但是他们的中文都是一个字分一个词

POST /_analyze
{"text":"胖胖and笨笨都是可爱的小猫猫","analyzer":"chinese"
}

2、ik分词器

1)安装Ik分词器

[ES]mac安装es、kibana、ik分词器_胖胖学编程的博客-CSDN博客

2)ik分词器有两种模式:

①ik_smart:最少切分
POST /_analyze
{"text":"胖胖and笨笨都是可爱的小猫猫","analyzer":"ik_smart"
}结果
{"tokens" : [{"token" : "胖胖","start_offset" : 0,"end_offset" : 2,"type" : "CN_WORD","position" : 0},{"token" : "笨笨","start_offset" : 5,"end_offset" : 7,"type" : "CN_WORD","position" : 1},{"token" : "都是","start_offset" : 7,"end_offset" : 9,"type" : "CN_WORD","position" : 2},{"token" : "可爱","start_offset" : 9,"end_offset" : 11,"type" : "CN_WORD","position" : 3},{"token" : "的","start_offset" : 11,"end_offset" : 12,"type" : "CN_CHAR","position" : 4},{"token" : "小猫猫","start_offset" : 12,"end_offset" : 15,"type" : "CN_WORD","position" : 5}]
}
②ik_max_word:最细切分,切分成词之后会查看词是否还能切分,如果能则继续切分。因为切的更细所以搜索概率高,占内存多。
POST /_analyze
{"text":"胖胖and笨笨都是可爱的小猫猫","analyzer":"ik_max_word"
}结果
{"tokens" : [{"token" : "胖胖","start_offset" : 0,"end_offset" : 2,"type" : "CN_WORD","position" : 0},{"token" : "笨笨","start_offset" : 5,"end_offset" : 7,"type" : "CN_WORD","position" : 1},{"token" : "都是","start_offset" : 7,"end_offset" : 9,"type" : "CN_WORD","position" : 2},{"token" : "可爱","start_offset" : 9,"end_offset" : 11,"type" : "CN_WORD","position" : 3},{"token" : "的","start_offset" : 11,"end_offset" : 12,"type" : "CN_CHAR","position" : 4},{"token" : "小猫猫","start_offset" : 12,"end_offset" : 15,"type" : "CN_WORD","position" : 5},{"token" : "小猫","start_offset" : 12,"end_offset" : 14,"type" : "CN_WORD","position" : 6},{"token" : "猫猫","start_offset" : 13,"end_offset" : 15,"type" : "CN_WORD","position" : 7}]
}

四、IK分词器的扩展和停用词典

1、例子

扩展词典:米哈游和原神都没有被识别为词,因为ik词典里没有这些词。

停用词典:而“的”、“了”又没有必要分词。还有一些禁词,违禁品、国家领导人这种都应该被禁掉。

POST /_analyze
{"text":"米哈游的原神太牛皮了","analyzer":"ik_max_word"
}{"tokens" : [{"token" : "米","start_offset" : 0,"end_offset" : 1,"type" : "CN_CHAR","position" : 0},{"token" : "哈","start_offset" : 1,"end_offset" : 2,"type" : "CN_CHAR","position" : 1},{"token" : "游","start_offset" : 2,"end_offset" : 3,"type" : "CN_CHAR","position" : 2},{"token" : "的","start_offset" : 3,"end_offset" : 4,"type" : "CN_CHAR","position" : 3},{"token" : "原","start_offset" : 4,"end_offset" : 5,"type" : "CN_CHAR","position" : 4},{"token" : "神","start_offset" : 5,"end_offset" : 6,"type" : "CN_CHAR","position" : 5},{"token" : "太","start_offset" : 6,"end_offset" : 7,"type" : "CN_CHAR","position" : 6},{"token" : "牛皮","start_offset" : 7,"end_offset" : 9,"type" : "CN_WORD","position" : 7},{"token" : "了","start_offset" : 9,"end_offset" : 10,"type" : "CN_CHAR","position" : 8}]
}

2、扩展、停用ik分词器的词库

1)编辑IKAnalyzer.cfg.xml 

进入docker的命令行,运行:

cd /usr/share/elasticsearch/plugins/elasticsearch-analysis-ik-7.12.1/config
vi IKAnalyzer.cfg.xml 

添加这两块 

2)编辑ext.dic、stopword.dic

在当前路径下创建ext.dic

 vi ext.dic
添加:
米哈游
原神

编辑stopword.dic(该文件本身就存在),添加:了、的 (如果添加的文件cat还是乱码,就自己创建一个同名文件,把原来的字段粘贴进去,再添加自己的字段)

3)重启es

4)测试

POST /_analyze
{"text":"米哈游的原神太牛皮了","analyzer":"ik_smart"
}结果:
{"tokens" : [{"token" : "米哈游","start_offset" : 0,"end_offset" : 3,"type" : "CN_WORD","position" : 0},{"token" : "原神","start_offset" : 4,"end_offset" : 6,"type" : "CN_WORD","position" : 1},{"token" : "太","start_offset" : 6,"end_offset" : 7,"type" : "CN_CHAR","position" : 2},{"token" : "牛皮","start_offset" : 7,"end_offset" : 9,"type" : "CN_WORD","position" : 3}]
}

这篇关于[ES]一基础|正排索引和倒排索引 | ES和MySQLd的对比 | 默认分词器 | IK分词器 | 扩展、停用ik分词器的词库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/274806

相关文章

RedHat运维-Linux文本操作基础-AWK进阶

你不用整理,跟着敲一遍,有个印象,然后把它保存到本地,以后要用再去看,如果有了新东西,你自个再添加。这是我参考牛客上的shell编程专项题,只不过换成了问答的方式而已。不用背,就算是我自己亲自敲,我现在好多也记不住。 1. 输出nowcoder.txt文件第5行的内容 2. 输出nowcoder.txt文件第6行的内容 3. 输出nowcoder.txt文件第7行的内容 4. 输出nowcode

Vim使用基础篇

本文内容大部分来自 vimtutor,自带的教程的总结。在终端输入vimtutor 即可进入教程。 先总结一下,然后再分别介绍正常模式,插入模式,和可视模式三种模式下的命令。 目录 看完以后的汇总 1.正常模式(Normal模式) 1.移动光标 2.删除 3.【:】输入符 4.撤销 5.替换 6.重复命令【. ; ,】 7.复制粘贴 8.缩进 2.插入模式 INSERT

mysql索引四(组合索引)

单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引;组合索引,即一个索引包含多个列。 因为有事,下面内容全部转自:https://www.cnblogs.com/farmer-cabbage/p/5793589.html 为了形象地对比单列索引和组合索引,为表添加多个字段:    CREATE TABLE mytable( ID INT NOT NULL, use

mysql索引三(全文索引)

前面分别介绍了mysql索引一(普通索引)、mysql索引二(唯一索引)。 本文学习mysql全文索引。 全文索引(也称全文检索)是目前搜索引擎使用的一种关键技术。它能够利用【分词技术】等多种算法智能分析出文本文字中关键词的频率和重要性,然后按照一定的算法规则智能地筛选出我们想要的搜索结果。 在MySql中,创建全文索引相对比较简单。例如:我们有一个文章表(article),其中有主键ID(

mysql索引二(唯一索引)

前文中介绍了MySQL中普通索引用法,和没有索引的区别。mysql索引一(普通索引) 下面学习一下唯一索引。 创建唯一索引的目的不是为了提高访问速度,而只是为了避免数据出现重复。唯一索引可以有多个但索引列的值必须唯一,索引列的值允许有空值。如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该使用关键字UNIQUE,把它定义为一个唯一索引。 添加数据库唯一索引的几种

mysql索引一(普通索引)

mysql的索引分为两大类,聚簇索引、非聚簇索引。聚簇索引是按照数据存放的物理位置为顺序的,而非聚簇索引则不同。聚簇索引能够提高多行检索的速度、非聚簇索引则对单行检索的速度很快。         在这两大类的索引类型下,还可以降索引分为4个小类型:         1,普通索引:最基本的索引,没有任何限制,是我们经常使用到的索引。         2,唯一索引:与普通索引

零基础STM32单片机编程入门(一)初识STM32单片机

文章目录 一.概要二.单片机型号命名规则三.STM32F103系统架构四.STM32F103C8T6单片机启动流程五.STM32F103C8T6单片机主要外设资源六.编程过程中芯片数据手册的作用1.单片机外设资源情况2.STM32单片机内部框图3.STM32单片机管脚图4.STM32单片机每个管脚可配功能5.单片机功耗数据6.FALSH编程时间,擦写次数7.I/O高低电平电压表格8.外设接口

十五.各设计模式总结与对比

1.各设计模式总结与对比 1.1.课程目标 1、 简要分析GoF 23种设计模式和设计原则,做整体认知。 2、 剖析Spirng的编程思想,启发思维,为之后深入学习Spring做铺垫。 3、 了解各设计模式之间的关联,解决设计模式混淆的问题。 1.2.内容定位 1、 掌握设计模式的"道" ,而不只是"术" 2、 道可道非常道,滴水石穿非一日之功,做好长期修炼的准备。 3、 不要为了

ps基础入门

1.基础      1.1新建文件      1.2创建指定形状      1.4移动工具          1.41移动画布中的任意元素          1.42移动画布          1.43修改画布大小          1.44修改图像大小      1.5框选工具      1.6矩形工具      1.7图层          1.71图层颜色修改          1

iptables(7)扩展模块state

简介         前面文章我们已经介绍了一些扩展模块,如iprange、string、time、connlimit、limit,还有扩展匹配条件如--tcp-flags、icmp。这篇文章我们介绍state扩展模块  state          在 iptables 的上下文中,--state 选项并不是直接关联于一个扩展模块,而是与 iptables 的 state 匹配机制相关,特