美文网首页
Lucene入门

Lucene入门

作者: gregocean | 来源:发表于2019-04-05 16:29 被阅读0次

    参考

    Lucene学习总结之一:全文检索的基本原理
    Lucene就是这么简单
    Lucene思维导图,让搜索引擎不再难懂

    Lucene 是一个高效的,基于Java 的全文检索库。很多检索工具,比如hibernate search、solr、elasticsearch都是基于它封装、扩展出来的。

    简单来说,lucene 就是一个 jar 包,里面包含了封装好的各种建立倒排索引的算法代码。用 Java 开发的时候,引入 lucene jar,然后基于 lucene 的 api 去开发。
    通过 lucene,我们可以将已有的数据建立索引,lucene 会在本地磁盘上面,给我们组织索引的数据结构。

    目标数据对象

    全文数据(非结构化数据)

    • 结构化数据: 指具有固定格式或有限长度的数据,如数据库,元数据等。
    • 非结构化数据: 指不定长或无固定格式的数据,如邮件,word文档等。
    • 半结构化数据:如XML,HTML等,根据需要可进行不同方式处理。

    非结构化数据又叫全文数据。

    思想

    全文数据的搜索主要有两种方法

    • 顺序扫描(Serial Scanning):比如grep
    • 建立索引,再对索引进行搜索:全文检索(Full-text Search)

    搜索引擎数据的特点:一次写入+基本不会修改+多次查询。而后者也是一次索引,多次使用(即便索引也需要不少时间,但能大大降低查询时间),所以目前商业文本搜索应用都基于此。

    使用场景

    • google、百度的搜索:全网、利用爬虫
    • Lucene:网页内/文件内

    均使用倒排索引

    与SQL区别,SQL搜索的缺点

    1. SQL只能针对数据库表搜索,不能直接针对硬盘上的文本搜索
    2. SQL没有相关度排名
    3. SQL搜索结果没有关健字高亮显示
    4. SQL需要数据库的支持,数据库本身需要内存开销较大
    5. SQL搜索有时较慢,尤其是数据库不在本地时,超慢
    • SQL使用的是数据库中的内存,在硬盘中为DBF文件
    • Lucene中存的是一系列的二进制压缩文件和一些控制文件,在硬盘上,统称为索引库

    基本概念

    索引库(Index)

    一个目录一个索引库,同一文件夹中的所有的文件构成一个Lucene索引库。类似数据库的表的概念。

    lucene的索引实例

    段(Segment)

    Lucene索引可能由多个子索引组成,这些子索引成为段。每一段都是完整独立的索引,能被搜索。

    文档(Document)

    一个索引可以包含多个段,段与段之间是独立的,添加新文档可以生成新的段,不同的段可以合并。段是索引数据存储的单元。类似****数据库内的行****或者****文档数据库内的文档****的概念。

    域(Field)

    一篇文档包含不同类型的信息,可以分开索引,比如标题,时间,正文,作者等。类似于****数据库表中的字段****。

    词(Term)

    词是索引的最小单位,是经过词法分析和语言处理后的字符串。一个Field由一个或多个Term组成。比如标题内容是“hello lucene”,经过分词之后就是“hello”,“lucene”,这两个单词就是Term的内容信息,当关键字搜索“hello”或者“lucene”的时候这个标题就会被搜索出来。

    流程

    Lucene检索流程.png

    相关文章

      网友评论

          本文标题:Lucene入门

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