lucene学习之基本概念

        最近工作中要用到搜索引擎相关内容,自己接触这块已经是三年前的事情了,现在抽空讲之前知识总结一下。

一、什么是Lucene

        Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。

        通俗的讲,它就是一个可以创建全文检索引擎系统的一堆jar包.可以使用它来构建全文检索引擎系统,但是它不能独立运行。

        全文检索系统有solr、es 等。

二、有什么作用

  •    互联网全文检索引擎(比如百度,  谷歌,  必应)
  •    站内全文检索引擎(淘宝, 京东搜索功能)
  •    优化数据库查询(因为数据库中使用like关键字是全表扫描也就是顺序扫描算法,查询慢)

三、Lucene实现全文检索的流程

   

(1) 创建索引

        对文档索引的过程,将用户要搜索的文档内容进行索引,索引存储在索引库(index)中。

  • 获得原始文档

        原始文档是指要索引和搜索的内容。原始内容包括互联网上的网页、数据库中的数据、磁盘上的文件等。我们可以通过网络爬虫、IO流、数据库读取等手段采集原始信息获取原始文档。

  • 创建文档对象

      获取原始内容的目的是为了索引,在索引前需要将原始内容创建成文档(Document),文档中包括一个一个的域(Field),域中存储内容。文件系统中一个文档表示一个Document,数据库的一条记录代表一个Document,数据库里面一个字段代表一个Field.

  • 分析文档

     将原始内容创建为包含域(Field)的文档(document),需要再对域中的内容进行分析,分析的过程是经过对原始文档提取单词、将字母转为小写、去除标点符号、去除停用词等过程生成最终的语汇单元,可以将语汇单元理解为一个一个的单词。

  • 创建索引

     对所有文档分析得出的语汇单元进行索引,索引的目的是为了搜索,最终要实现只搜索被索引的语汇单元从而找到Document(文档)。

注意:创建索引是对语汇单元索引,通过词语找文档,这种索引的结构叫倒排索引结构

(2)、查询索引过程

        查询索引也是搜索的过程。搜索就是用户输入关键字,从索引(index)中进行搜索的过程。根据关键字搜索索引,根据索引找到对应的文档,从而找到要搜索的内容。

  • 用户查询接口

    全文检索系统提供用户搜索的界面供用户提交搜索的关键字,搜索完成展示搜索结果。

    Lucene不提供制作用户搜索界面的功能,需要根据自己的需求开发搜索界面。

  • 创建查询对象

       用户输入查询关键字执行搜索之前需要先构建一个查询对象,查询对象中可以指定查询要搜索的Field文档域、查询关键字等,查询对象会生成具体的查询语法。

  • 执行查询

        根据查询语法在倒排索引词典表中分别找出对应搜索词的索引,从而找到索引所链接的文档链表。类似于执行sql查询语句。

  • 渲染查询结果

        以一个友好的界面将查询结果展示给用户,用户根据搜索结果找自己想要的信息,为了帮助用户很快找到自己的结果,提供了很多展示的效果,比如搜索结果中将关键字高亮显示,百度提供的快照等。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章