说明
在保存数据的同时,es还会分词,并建立 倒排索引
倒排索引
通过一个单词,找到含有这个单词,或者和这个单词有关系的文章:
word -> to -> documents
将这种索引,称为 inverted index,直译过来,应该叫反向索引,国内翻译成 倒排索引
执行过程
分词
html java mysql —> html java mysql
html css js —> html css js
java mysql —> java mysql
保存的数据
保存的数据 和 id 如下:
| id | 标题 |
|---|---|
| 1 | html java mysql |
| 2 | html css js |
| 3 | java mysql |
Posting List(倒排列表)
倒排列表记录了出现过某个单词的所有文档的文档列表及单词在该文档中出现的位置信息
term:一段文本经过分词后,一个一个的词
Posting list就是一个数组,存储了所有符合某个词的文档ID
| term | Posting List |
|---|---|
| css | 2 |
| html | [1,2] |
| java | [1,3] |
| js | 3 |
| mysql | [1,3] |
查询
比如查询 java html 时,首先进行分词:java、html
然后到 Posting list 去匹配,命中的有:id是 1、2、3 的记录
得分
根据匹配程度计算得分
- 其中id是
1的记录,命中java、html2个词,得分最高 - 其中id是
2的记录,命中html1个词。但由于该记录有 3 个词,只命中一个词,所以得分较低 - 其中id是
3的记录,命中java1个词。得分较高