主要知识点
倒排索引核心原理: normalization
假设有两个文档, 内容如下
- doc1:I really liked my small dogs, and I think my mom also liked them.
- doc2:He never liked any dogs, so I hope that my mom will not expect me to liked him.
1 初步分词, 只是确定该词是否在文档中存在, 不做其他处理
- word doc1 doc2
- I * *
- really * *
- my * *
- small *
- dogs *
- and *
- mom * *
- also *
- them *
- He *
- any *
- so *
- hope *
- that *
- will *
- not *
- me *
- to *
- him *
接下下搜索 "mother like little dog", 发现没有结果, doc1,doc2 都没有被搜索出来, 原因如下:"mother like little dog", 分词后的词为 motherlikelittledogdoc1 和 doc2 均不含有这四个词, 所以搜索不出来结果,
二 normalization
按常规来说, 对于上述搜索 es 是应该出来结果的, 因为 mother 和 mom 是同义词, like 和 liked 只是时态不同, little 和 small 是同义词, dog 和 dogs 是单复数形式不同可以发现如果仅仅这样建立是否存在的索引, 而不做其他处理的话是没有多大用处的, 所以在 es 内部, 在建立倒排索引的会进行 normalization, es 对 content 的处理 tokenization 和 normalization 称为 analysis 过程 ES 有很多种内置的 analyzer 来处理这些 normalization 处理过程会在建立倒排索引的时候执行进一步的操作, 对拆分出的各个单词进行相应的处理 (包括但不限于时态的转换, 单复数的转换, 同义词的转换, 大小写的转换等) 以提升后面搜索的时候能够搜索到相关联的文档的概率经过 normalization 处理后就可以搜索出正确的结果
来源: http://www.bubuko.com/infodetail-2506232.html