Lucence是apache旗下的一款高性能、可伸缩的开源的信息检索库,最初始Doug Cutting开发,并在SourceForge的网站下提供下载,它支持的预研C++,C#,perl、Python。
倒排
索引也称为反向索引,是搜索引擎中最常见的数据结构,几乎所有的搜索引擎都会用到倒排索引。它将文档中的词作为关键字,建立词与文档的映射关系,通过对倒排索引的检索,可以根据词快速获取包含这个词的文档列表,这对于搜索引擎来说至关重要。
分词
又成为切词,就是讲句子或者段落进行切割,从中提取出包含固定予以的词。
停止词,在英语中包含了 a、the、and这样频率很高的词,如果这些词都被建到索引中进行索引的话,搜索引擎就没有任何意义了,因为几乎所有的文档都包含这些词。
排序
,当输入一个关键字进行搜索时,可能会命中许多文档,搜索引擎给用户的价值就是快速找到需要的文档,因此需要将相关度更大的内容排到前面,以便使用户能够更快的筛选有价值的内容弄。
文档
:在lucence的定义中,文档是一些列(field)的组合,而文档的域则代表一系列与文档有关的内容,与数据库的记录的概念有点相似,一行记录所包含的字段对应的就是文档的域。比如,一个老师的个人信息包括,年龄、身高、性别、个人简介等。
域:field,索引的每个文档中都包含一个或多个不同的域,每个域都包含了域的名称和域对应的值,并且与还可以是不同的类型,如字符串、整型、浮点型等。
词(Term)
,Term是搜索的基本单元,与Field对应的名字以及搜索的关键词,可以永泰来查询制定域中包含特定内容的文档。
查询(Query)
,最基本的查询可能是一些列Term的条件组合,成为TermQuery,但也有可能是短语查询、前缀查询、范围查询
分词器,
文档在被索引之前,需要经过分词器处理,以提取关键的语义单元,建立索引,并提出无用的信心,如停止词,提高查询的准确性。
Lucence 索引的构建分这样几步,通过制定的数据格式,检Lucence的Document 传递给分词器Analyzer进行分词,经过分词器之后,通用索引吸入工具IndexWriter将索引写入到制定的目录。
对于索引的查询,首先构建查询的Query,通过IndexSearcher进行查询,得到命中的TopDocs。然后通过TopDocs的scoreDocs()方法,拿到ScoreDoc,通过ScoreDoc,得到对应的文档编号,IndexSearcher通过文档编号,使用IndexReader对制定目录下的索引内容进行读取,得到命中的文档后返回。