ElasticSearch7笔记:倒排索引
索引的本质是一种数据结构,es使用一种叫做倒排索引的结构来完成快速全文搜索。
正排与倒排索引
我们常见的目录就是正排索引了,如我们要在唐诗三百首中找一首李白的《静夜思》,正常都是先查找目录,找到静夜思对应的页码,然后翻到对应的页码。
比如现在我要查找带"月"字的古诗,显然查目录就不可行了,我需要一个热字或热词到古诗的索引。
第一个数字表示出现次数,第二个数字表示页码,后面是古诗名。这样就可以按照热字或热词来快速搜索古诗了。
ES中的倒排索引
在es中,正排索引就是有文档id到doc的关联,倒排索引就是由文档包含的单词(分词操作后的结果集)到文档id的关联。倒排索引包含:单词字典,倒排列表。
单词字典就是就是文档所包含的所有单词,记录了单词到倒排列表的关联。倒排列表记录了单词对应的文档集合,由倒排索引项组成:doc id(文档id)、TF(term frequency)词频、Pos(分词位置)、Offset(偏移)。
id | doc |
---|---|
1 | I like elasticsearch |
2 | elasticsearch makes me happy |
如上有两个文档doc,我们要搜索包含elasticsearch的doc,就需要查看倒排索引,然后找到目标文档。
doc | TF | Pos | Offset |
---|---|---|---|
1 | 1 | 2 | [10,23) |
2 | 1 | 0 | [0,13) |