elasticsearch(简称ES)是一个基于Lucene构建的开源、分布式、RESTful的全文本搜索引擎,大家都知道使用elasticsearch全文搜索,是因为用它快,那为什么会快呢?这主要取决于它底层是用倒排索引实现的。那什么是倒排索引呢,与之对应的正排索引又是什么呢?
正排索引
elasticsearch是面向文档的,每向elasticsearch插入一个文档,他都会与之对应生成一个id
构建正排索引,如下
文档编号 | 文档内容 |
---|---|
1 | 世界不会辜负可爱的人 |
2 | 而我们如此可爱 |
3 | 可爱的我们 |
这种方式,检索的效率低
如果用倒排索引会是什么样呢
倒排索引
倒排索引是和正排索引相反的
我们将这些文档内容分词,然后对这些分词进行分组(关于分词,具体可参考博客https://blog.csdn.net/cxh6863/article/details/106717539),每个词都会记录它出现的频率和所在文档中出现的位置
例如我从中只取了其中3个关键词,倒排索引结果如下
Term | Posting List |
---|---|
世界 | 1 |
我们 | 2,3 |
可爱 | 1,2,3 |
查询过程
查询的时候,比如我查“可爱”这个关键词的时候,他会通过倒排索引这个关键词出现的文档位置是1,2,3,然后再通过正排索引查询到文档1,2,3的内容返回。
版权声明:本文为cxh6863原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。