美文网首页
再次学习ES--1--Lucene

再次学习ES--1--Lucene

作者: lionel880 | 来源:发表于2018-12-06 11:24 被阅读0次

    感觉一次学习ES不够,当时只是学习了如何使用es,更多的是把es当做一个数据库黑盒,只是知道了如何用,确不成考虑过底层的原理,现在希望能补上

    1 关于Apache Lucene简介

    Lucene 是apache软件基金会一个开放源代码的全文检索引擎工具包,是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。

    2 lucene的总体架构

    document --文档,数据载体,包含一个或多个字段
    field--文档的一个片段,包含2部分,字段名和内容
    term--词项:搜索时的单位,代表文本的某个词
    token--词条:term在字段中的一次出现,包括term的文本、开始和结束的唯一和类型(分析阶段的概念)

    *倒排索引 (inverted index)结构
    将term映射到文档的数据结构,是面向词项而不是文档


    倒排索引

    上面的是笼统的概念,实际的索引会更为复杂,索引还会存储其他信息如词向量(存储一个字段的所有词条),字段的原始信息,文档删除标记等。但不需要掌握这些。

    Segment--段
    每个索引由多个段组成,索引是总的一个概念,每个段只会被创建一次但会被查询多次,因此在索引期间,段经创建就不会再被修改。所以文档被删除,删除信息会被单独保存在一个文件中,段本身并不改变。
    segment merge-- 段合并
    多个段合并,由Lucene内在机制决定在某个时刻执行,合并后段数量更少,但是单个段变大,消耗I/O,合并后会清楚一些不再使用的信息

    3 分析数据 analysis

    文档如何转换为倒排索引,查询如何转换为可用于搜索的词项,这个过程就是 分析
    文本分析由分析器执行,分析器分为 分词器(tokenizer),过滤器(filter)和字符映射器(character mapping)组成

    • tokenizer--将文本切割成词条,包括原始信息,如位置,长度等,结构输出为词条流
    • filter--过滤、修改词条,如小写过滤器等
    • character mapping--用于分词前的本文预处理,如HTML的文本去标签

    4 查询语言

    一个查询,通常被分割为 词项 和 操作符
    词项会在查询分析过程中,根据设置进行处理
    而操作符包含 布尔操作符(and |or| not),+,-,^(权重,默认为1)

    • 查询的基本就是在字段中查询,Lucene所有的数据都存储在field中,查询提供字段名和查询的从句

    lucene的数据存储数据结构,有待深入研究

    5 lucene是如何进行多字段查询的

    如果有多字段进行查询时,相当于要从2个term的 文档集合取交集,先了解拉链法(有序队列,从小到大比较),再了解用跳表优化拉链法,可以简化时间复杂度为(Olog(N))

    相关文章

      网友评论

          本文标题:再次学习ES--1--Lucene

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