比如现在有两个document
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.
首先分词,初步的倒排索引的建立
通俗的说就是将两个document合并,并去掉重复的单词,然后看doc1和doc2中是否出现了此单词
单词 | doc1 | doc2 |
---|---|---|
I | 出现 | 出现 |
really | 出现 | |
liked | 出现 | 出现 |
my | 出现 | 出现 |
small | 出现 | |
dogs | 出现 | |
and | 出现 | |
think | 出现 | |
mom | 出现 | 出现 |
also | 出现 | |
them | 出现 | |
He | 出现 | |
never | 出现 | |
any | 出现 | |
so | 出现 | |
hope | 出现 | |
that | 出现 | |
will | 出现 | |
not | 出现 | |
expect | 出现 | |
me | 出现 | |
to | 出现 | |
him | 出现 |
上述就是倒排索引的整个过程
搜索mother like little dog,不可能有任何结果,因为搜索这句话会先进行如下分词
mother
like
little
dog
然后在拿着每一个分词去上面倒排索引表格中去找有没有匹配的单词,发现四个单词都未有匹配的,所以不会有结果。
这个是不是我们想要的搜索结果???绝对不是,因为在我们看来,mother和mom有区别吗?同义词,都是妈妈的意思。like和liked有区别吗?没有,都是喜欢的意思,只不过一个是现在时,一个是过去时。little和small有区别吗?同义词,都是小小的。dog和dogs有区别吗?狗,只不过一个是单数,一个是复数。
这就引入了一个知识点,normalization。
建立倒排索引的时候,会执行一个操作,也就是说对拆分出的各个单词进行相应的处理,以提升后面搜索的时候能够搜索到相关联的文档的概率。
会将上面表格中的
liked --》like
small --》little
dogs --》dog
搜索条件也会normalization,
mom ―> mother
liked ―> like
small ―> little
dogs ―> dog
从上观察出进行了时态的转换,单复数的转换,同义词的转换,大小写的转换,这里只是举例子,ES远比这强大。
这样在进行搜索
就可以搜索出doc1和doc2两条数据了
若有兴趣,欢迎来加入群,【Java初学者学习交流群】:458430385,此群有Java开发人员、UI设计人员和前端工程师。有问必答,共同探讨学习,一起进步!
欢迎关注我的微信公众号【Java码农社区】,会定时推送各种干货:
qrcode_for_gh_577b64e73701_258.jpg
网友评论