美文网首页
25. ElasticSearch 是如何建立索引的?

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

作者: 木叶苍蓝 | 来源:发表于2023-07-11 16:12 被阅读0次

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

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

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

    • ElasticSearch 开放了一系列的 RESTful API,基于这些 API ,可以快捷地实现各种搜索功能
    • ElasticSearch 对分布式场景下的应用有特别好的支持,包括良好的扩展性。可以扩展到上百台服务器的集群规模,以及近似实时分享的索引实现。


      20230709161646.jpg

    ELK stack

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

    • ElasticSearch 用于数据分析和检索
    • Logstash 用于日志收集
    • Kibana 用于界面的展示

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

    索引的如何建立

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

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

    分词和索引

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

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

    • 文档1,Jerry and Tom are good friends.
      Jerry / / and / / Tom / / are / / good / / friends /.
    • 文档2,Good friends should help each other.
      Good / / friends / / should / / help / / each / / other /.

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

    建立索引

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

    • 正排索引是 "文档-关键词" 的格式
    • 倒排索引是 "关键词-文档" 的格式


      20230709170458.jpg
    20230709171912.jpg

    对比 B+ 树

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

    • 对于数据库,索引的作用是提高数据查询的性能
      选择了 B+ 树作为索引的实现结果,可以更好的实现通过主键以及通过区间范围查询的要求

    • 对于倒排索引,则是对应具体的应用场景
      倒排索引实现的是根据关键词,也就是分词的结果,去查找文档,或者不同的网页。

    总结

    • ElasticSearch 存储组件及其应用
    • 日志分析的三大件之 ELK技术栈
    • 倒排索引是如何实现的

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

    相关文章

      网友评论

          本文标题:25. ElasticSearch 是如何建立索引的?

          本文链接:https://www.haomeiwen.com/subject/pgkjudtx.html