- 有一个场景,用户输入like,要搜索出带有like的文档,文档如下
I like java
I am tom
I don`t like eat
I like book
how old are you
hello tom
you like drink water
以上对应的ES文档如下
正常情况,要搜索带有【like】的文档数据,那么就要一条条遍历去对比。那真实环境可能有几亿,几十亿数据,这种方法显然就不可接受的。因此ES的做法是将这些数据都拆成单个的词,并会记录每个词出现在哪些文档,那么拆分后结构是这样就是这样的(片段),如下图:
就像上图,把所有文档都拆成单词,并分别保存,标注上单词序号,出现在哪些文档中,具体在该文档内容的第几个词。
这就表示搜索【like】这个词,他会从单词中找到like出现在1,4,7这3个文档内容中,所以就会直接返回1,4,7文档内容,并不会全局扫描去判断。这就是倒排索引的设计。当然上面的图并不完整,下面给一张完整的倒排索引图:



