倒排索引
对文档内容分词,对词条创建索引,并记录词条所在的文档信息,查询时先根据词条查询到文档id,而后获取到文档。
文档: es中每一条数据就是一个文档。
词条:对文档中的内容进行分词,得到的词语就是词条
倒排索引存储图解: | 倒排索引查询图解 |
![]() | ![]() |
ES和mysql的的对比
mysql:擅长事务类型操作,可以确保数据的安全性和一致性。
elasticseach:擅长海量数据的搜索、分析、计算。
mysql | elasticseach0 | 说明 |
table | index | 索引,文档的集合,类似于数据的表 |
row | document | 文档,就是一条条的数据,类似于数据库的中的行,文档都是json格式。 |
column | field | 字段,就是json文档中的字段,类似数据库的列 |
schema | mapping | 映射,索引中的约束,例如字段类型的约束,类似数据库的表结构 |
sql | DSL | DSL是es的json风格请求语句,用来操作es,实现CRUD ES使用http请求实现操作 |
分词
分词演示
POST /_analyze
{
"analyzer":"standard",
"text":"我是一名java程序员"
}
POST:请求方式
/_analyze:请求路径(索引),kibana会帮我们补充es的请求地址
请求参数,json风格:analuzer分词器类型,这里使用默认的standard分词器,text,要分词的内容
IK分词器下载安装
github下载老版本经常崩溃,可以在优快云在中搜索下载
下载完成后解压到es安装目录的 plugins 目录下,在plugins下创建IK分词器插件的文件存放目录,然后重启es就会自动加载IK分词器插件
ik分词器分词模式
ik_smart:最少切分
ik_max_word:最细切分
ik_max_word的切分粒度大于ik_smart,会占用更大的内存,减少查询效率,但是搜索会更精确。
ik_smart切分效果 | ik_max_word切分效果 |
![]() | ![]() |
ik分词器词典配置
IK分词器插件的config目录:IKAnalyzer.cfg.xml 可以配置分词条件
<entry key="ext_dict"></entry> 里边配置dic文件,dic文件中书写分词条件,比如停止词典中配置一些语气助词。这样分词的时候就不会把这些词分出来。
配置停止词之前
配置停止词,重启es
重启后分词没有 “一个”了