这张图对初学者来说很懵逼,不知道为什么会有这样的对应关系。那我根据Kibana结合来解释一下:
全文检索就是对文档根据关键字搜索,把文档内容根据词的意义进行分词,把词次相近的划分成文档。
比如对一本书(book)划分:
安徽 含有这个关键字的文档在1,2,3,10,15 页; 北京 90.91...500页。大连:10亿...ES是将其排好序的。(Lucene完成)
比如我给一本书建立索引,传统的方式就是book 数据库,然后里面有一张表叫province,按照英文字母从小到大排序。比如 安徽,北京,重庆,上海,大连...扬州等。
数据库表:province
id | prov | content |
1 | 安徽 | 巴拉巴拉 |
2 | 安徽 | 巴拉巴拉 |
... | ||
10亿 | 大连 | balababla |
所以我按照字母来找,province = “大连” 的,我要一页一页的遍历过去前面10亿条数据,才能找到。
再回来说es与关系型数据库的类比:
ES把要搜索的库叫做一个索引,也就是book。它其中有一个type 叫province,type里有一个fidle 叫 prov, 去查询prov = "大连" 的结果叫做document,对应的province表中的一条或者多条记录。
下面通过kibana来演示:(涉及到一些DSL语法)
我手动添加了一个index = book,type = province,id= 1的数据。其中他有的字段(filed)就是和数据库字段对应的。
然后去查询一下;
查询结果如下:
hits 里面的内容就是查询出的结果,就是document,相当于数据库的行记录。