25. ElasticSearch 是如何建立索引的?

2023-07-11  本文已影响0人  木叶苍蓝

在关系型数据库和NoSQL数据库之外,还有一类非常重要的存储中间件——文件索引

Lucene 是一个开源的全文检索引擎类库,支持各种分词以及搜索相关的实现
在实际项目中进行二次开发,你需要非常熟悉 Lucene 的实现机制以及 API 应用

ElasticSearch 是一个基于 Lucene 的分布式全文检索框架,在 Lucene 类库的基础上实现

ELK stack

ElasticSearch 是由 Elastic 公司创建的,Elastic 公司还有另外两款产品
分别是 Logstash 及 Kibana 开源项目,这三个开源项目组合在一起称为 ELK stack

ELK 可以用于快速查询数据并可视化分析,在日志处理,大数据等领域有非常广泛的应用。

索引的如何建立

ElasticSearch 存储的单元室索引
关系型数据库是按照关系表的形式组织数据
大部分 NoSQL 数据库是 K-Value 的键值对方式

ElasticSearch 索引的实现基于 Lucene ,使用倒排索引的结构
倒排索引是百度等搜索引擎实现的底层技术之一
在搜索引擎中,索引的建立需要经过网页爬取,信息采集,分词,索引创建的过程
在 ElasticSearch 内存存储的实现中,数据的写入可以对比搜索引擎对网页的抓取和信息采集的过程
只需要关注分词和索引的创建

分词和索引

分词的策略会直接影响索引结果
分词器是一个可插拔的组件,包括内置的标准分词器
也可以引入对中文支持较好的 IKAnalyze 中文分词器等

假设我们在 ElasticSearch 中新增了两个文档,每个文档包括如下内容

一般,中文分词用得比较多的策略是基于字典的最长字符串匹配方式
有一小部分天然存在歧义的文档是无法处理的
比如 学生会组织各种活动
按照最长串匹配的方式,可以切分成 学生会/组织各种活动
但实际要表达的可能是学生/会/组织各种活动

建立索引

索引存储的结构是倒排索引
倒排索引描述了一个映射关系,包括文档中的分词后的结果哦,以及分别包含这些单词的文档列表
统一为小写,把分词之后的单词组成一个不重复的分词列表,可以按照字典序排序。

20230709171912.jpg

对比 B+ 树

MySQL InnoDB 引擎的索引实现是基于 B+ 树
倒排索引和B+树索引有哪些区别呢?
B+ 树描述的是索引的数据结构
倒排索引是通过索引的组织形式来命名的

总结

在一些小型项目中,会用数据库模糊匹配的方式实现关键字检索。

上一篇 下一篇

猜你喜欢

热点阅读