[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

相关文章

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

禁止平板,iPad长按弹出默认菜单事件

通过监控按下抬起时间差来禁止弹出事件,把以下代码写在要禁止的页面的页面加载事件里面即可     var date;document.addEventListener('touchstart', event => {date = new Date().getTime();});document.addEventListener('touchend', event => {if (new

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext = new ClassPathXmlApplicationContext("bean.xml");} BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanF

免费也能高质量!2024年免费录屏软件深度对比评测

我公司因为客户覆盖面广的原因经常会开远程会议,有时候说的内容比较广需要引用多份的数据,我记录起来有一定难度,所以一般都用录屏工具来记录会议内容。这次我们来一起探索有什么免费录屏工具可以提高我们的工作效率吧。 1.福晰录屏大师 链接直达:https://www.foxitsoftware.cn/REC/  录屏软件录屏功能就是本职,这款录屏工具在录屏模式上提供了多种选项,可以选择屏幕录制、窗口