引言
本篇所指搜索引擎,是垂直化搜索引擎,其主要针对企业内部的自有数据进行检索,在分布式系统中扮演着重要的角色,与大家熟知的Baidu这种互联网搜索引擎还是有着一定的差异的。那么,对于想要学习搜索引擎的同学来说,首先要搞清楚这几个重要概念。

倒排索引
即反向索引,是搜索引擎中最常见的数据结构,几乎所有搜索引擎都会用到它。它将文档中的词作为关键字,建立词与文档的映射关系,通过对倒排索引的检索,可以根据词快速获取包含这个词的文档列表,所以它对于搜索引擎来说至关重要。
分词
所谓分词,就是将句子或者段落进行切割,从中提取出包含固定语义的词。对于英语来说,其基本单位就是单词,因此分词特别容易,只需根据符号、空格或者段落分割,提取词干即可。
但是对于中文来说,想要将一段文件准确地切分成一个个单词,就不那么容易了。中文以字为最小单位,多个字连载一起才能构成一个表达具体含义的词,同时,中文会用标点符号来分割句子和段落,唯独词没有一个形式上的分隔符,因此,对于支持中文搜索的搜索引擎来说,需要一个合适的中文分词工具,以便简历倒排索引。

停止词
通常在英文或者中文中,会包含很多使用频率极高的词,比如英文的the、and,或者是中文的“了”、“在”等等,这些词其实没有具体含义,区分度低,搜索引擎对这些词进行索引没有任何意义,因此需要被忽略掉,而这些被忽略掉的词就是停止词。
排序
当我们输入一个关键字搜索时,可能会命中很多文档,搜索引擎带给用户的直接利益就是快速的找到关键字对应的文档,因此,需要将相关度越大的排在越前面,以便让用户尽可能快地找到自己想要的内容。这时,就需要有合适的排序算法了,一般来说,命中标题的文档将比命中内容的文档有更高的相关性,命中次数越多的文档比命中次数少的文档具有更高的相关性,而在商业化的搜索引擎中,排序规则就更复杂了,他们要考虑广告、竞价排名等因素。

以Lucene为例,以下几个概念也指的关注:
文档(Document)和域(Field)
文档是一系列域(Field)的组合,而域是一系列与文档相关的内容。文档可以类比为数据库的表记录,而一行记录所包含的字段就是域。域都包含了域的名称和对应值,域可以是不同类型的,比如字符串、整型等。
词(Term)
它是搜索的基本单元,与域对应,它包含了搜索的域的名称及搜索的关键词,可以用它来查询指定域中包含特定内容的文档。
查询(Query)
最基本的查询是TermQuery,即一系列的Term的条件组合。但也有可能是短语查询(PhraseQuery)、前缀查询(PrefixQuery)、范围查询(TermRangeQuery、NumerricRangeQuery等)等等。
分词器
文档在被索引之前,需要经过分词器处理,提取其中的关键语义单元,建立索引,并剔除无用的信息(比如停词),以提高准确性。而这之中,中文的分词提取相对英文来说更为复杂,通常常用的中文分词包括一元分词、二元分词、词库分词等。
好了,大致的概念就介绍到此,对于想要深入学习搜索引擎的同学,建议从Lucene学起,别问为什么,一般人我不告诉他!