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 版权协议,转载请附上原文出处链接和本声明。
