Lucene > 概念

《大型分布式网站架构设计与实践》学习笔记

1.垂直化搜索引擎

垂直化搜索引擎,与Google、Baidu等互联网搜索引擎存在差异,前者主要针对企业内自有数据的检索,后者则是采用网络爬虫对全网数据进行抓取,建立索引供用户进行检索。

在分布式系统中,垂直化索引既能满足用户对全文检索、模糊匹配的需求,解决数据库like查询效率低下的问题,又能解决分布式环境下,由于采用分库分表或NoSQL数据库,而无法进行复杂联合查询的问题。

2.搜索引擎中的概念

1.倒排索引(inverted index)
倒排索引是搜索引擎中最常见的数据结构,几乎所有的搜索引擎都会用到倒排索引。它将文档中的词作为关键字,建立词与文档的映射关系,通过对倒排索引的检索,可以根据词快速获取包含这个词的文档列表。

2.分词
即将句子或段落切割,从中提取出包含固定词义的词。对于英语来说,语言的基本单位就是单词,所以分词很容易,只需要根据空格/符号/段落进行分割,并且排除停用词,提取词干即可完成。
中文以字为最小单位,多个字连在一起才能构成一个表达具体含义的词,中文会用明显的标点符号来分割句子和段落,唯独词没有一个形式上的分割符,因此,对于中文分词来说需要一个合适的中文分词器。

3.停用词
一些词出现频率比较高,但没有索引的价值,比如英语的 a、the、and,中文的“的”、“在”、“了”,搜索引擎对这些做索引没任何意义,因此,停用词需要被忽略掉。

4.排序
当输入一个关键字搜索时,可能会命中许多文档,搜索引擎给用户的价值就是快速的找到需要的文档,因此,需要将相关度更大的内容放在前面,以便用户能够更快地筛选出有价值的内容,这时需要适当的排序算法。

3.Lucene中的概念

1.文档(Document)
在lucene中,文档是一系列域(Field)的组合,而文档的域代表一系列与文档相关的内容。和数据库表的概念有些类似,一行记录所包含的字段对应的就是文档的域。比如,一个文档,比如一个老师的个人信息,可能包括年龄、身高、性别、个人简介等内容。

2.域(Field)
索引的每个文档中都包含一个或者多个不同名称的域,每个域都包含了域的名称和对应的值,而且域还可以是不同的类型,如字符串、整型、浮点型等;

3.词(Term)
Term是搜索的基本单元,与Field对应,它包括了搜索的域的名称以及搜索的关键字,可以用它来查询指定域中包含特定内容的文档。

4.查询(Query)

5.分词器(Analyzer)
文档在被索引之前,需要经过分词器处理,以提取关键的语义单元,建立索引,并剔除无用的信息,如停用词等,以提高查询的准确性。

4.索引构建与查询的过程

1)构建
Lucene索引的构建过程大致分为这样几个步骤,通过指定的数据格式,将Lucene的Document传递给分词器Analyzer进行分词,经过分词器分词后,通过索引写入工具IndexWriter将索引写入指定的目录。

2)查询
首先构建Query,通过IndexSearcher进行查询,得到命中的TopDocs,然后通过TopDocs的scoreDocs()方法,拿到ScoreDoc,通过ScoreDoc,得到对应的文档编号,IndexSearcher通过文档编号,使用IndexReader对指定目录下的索引内容进行读取,得到命中的文档后返回。

你可能感兴趣的:(Lucene)