3. 倒排索引原理:
(1). 两个document:
- The quick brown fox jumped over the lazy dog
- Quick brown foxes leap over lazy dogs in summer
(2). 提取文档分词,建立倒排索引(区分了大小写):
Term Doc_1 Doc_2
-------------------------
Quick | | X
The | X |
brown | X | X
dog | X |
dogs | | X
fox | X |
foxes | | X
in | | X
jumped | X |
lazy | X | X
leap | | X
over | X | X
quick | X |
summer | | X
the | X |
(3). 搜索含有quick或brown的文档:
Term Doc_1 Doc_2
------------------------
brown | X | X
quick | X |
------------------------
Total | 2 | 1
- Doc_1中含有两个单词,对于搜索的匹配度要高于Doc_2.
- 根据搜索的匹配度,计算相关度分数时,Doc_1的匹配度高,分数会比Doc_2高.
- 因此,分数高就会排在前面.
(4). 问题:
- Quick和quick以独立的词条出现,但用户搜索的时候,可能认为它们是相同的词(不区分大小写).
- fox和foxes、dog和dogs都是非常相似词根.
- jumped和leap是同义词(相关的).
- 要搜索含有Quick和fox的文档是搜索不到的(是区分大小写的).
- 这样的倒序索引意义不大.
4. 标准化规则(normalization):
建立倒排索引的时,会对拆分出的各个单词进行相应的处理(即做了标准化规则),以提升相关联的文档的概率.
Term Doc_1 Doc_2
-----------------------
brown | X | X
dog | X | X
fox | X | X
in | | X
jump | X | X
lazy | X | X
over | X | X
quick | X | X
summer | | X
the | X | X
- 使用标准化规则处理的最终结果.
- 将不区分大小写、fox单复数、同义词合并为一个单词.
- 提高了用户搜索的概率.
5. 分词器:
分词器就是从一串文本中切分出一个一个的单词,并对每个单词进行标准化.
5.1 三部分:
- character filter: 分词之前的预处理,过滤掉HTML标签,特殊符号转换等.
- tokenizer: 分词
- token filter: 标准化
5.2 内置分词器:
- standard分词器: a. es默认的分词器. b. 将词汇单元转换成小写形式,并去除停用词和标点符号,支持中文采用的方法为单字(一个一个字)切分. c. 停用词指的是在自然语言处理中,一些不包含什么信息的词语,以及一些特别高频的词: 如the、to、the、a、an、and等...
- simple分词器: a. 先通过非字母字符来分割文本信息,再将词汇单元统一为小写形式. b. 会去掉数字类型的字符.
- Whitespace分词器: a. 仅仅去除空格,对字符没有lowcase(小写)化,不支持中文. b. 不对生成的词汇单元进行其他的标准化处理.
- language分词器: a. 特定语言的分词器,不支持中文.