其他分享
首页 > 其他分享> > 16 doc values 【正排索引】

16 doc values 【正排索引】

作者:互联网

搜索的时候,要依靠倒排索引;排序的时候,需要依靠正排索引,看到每个document的每个field,然后进行排序,所谓的正排索引,其实就是doc values 在建立索引的时候,一方面会建立倒排索引,以供搜索用;一方面会建立正排索引,也就是doc values,以供排序,聚合,过滤等操作使用 doc values是被保存在磁盘上的,此时如果内存足够,os会自动将其缓存在内存中,性能还是会很高;如果内存不足够,os会将其写入磁盘上   向index中存储的文档 PUT /cc_article/long_article/1 {     "Title":"Thinking in Elastic Search",     "Price":30 } PUT /cc_article/long_article/2 {     "Title":"Deep in Elastic Search",     "Price":25 } 建立倒排索引(假设索引中还有doc3、doc4) 注意:在ES中,每个被索引的字段,都有自己的倒排索引 Title的倒排索引: term        doc1        doc2         doc3           doc4 ----------------------------------------------------------- Thinking      * in                 *            * Elastic          *            * Search         *            * Deep                         *   Price的倒排索引: term      doc1        doc2          doc3           doc4 ------------------------------------------------------------ 30           * 25                            * 22                                              * 27                                                                 *   搜索并排序 GET /cc_article/long_article/_search {     "query": {         "match": {            "Title": "Elastic Search"         }     },     "sort": [        {           "Price": {              "order": "asc"           }        }     ] } 返回: doc2:{Title:"Deep in E.S."} doc1:{Title:"Thinking in E.S."}   执行分析: 在执行搜索时,会直接去倒排索引中,查Elastic和Search后面,对应的文档。得到doc1,doc2 但是在执行按Price排序的时候,就不能使用Price的倒排索引了。加入使用Price倒排索引,需要遍历整个Price的倒排索引,才能知道doc1、doc2对应的Price,然后再进行排序。这就会带来检索Price=22、27等这种并不命中搜索结果的额外开销。 因此,高效的做法是,建立Price的正排索引。正排索引是列式存储的,即一个索引中,所有doc的同一字段,放在一起。不同字段,放在不同列中。   正排索引: doc               title ---------------------------------------------- doc1            Thinking, in, Elastic, Search doc2            Deep,in,Elastic,Search   doc              price -------------------------------- doc1              30 doc2              25 doc3              22 doc4              27   执行排序: 因为在执行搜索时,确定了结果范围为doc1,doc2。 因此,在按Price排序时,直接去 price的正排索引中,取出doc1、doc2对应的price,再排序即可。(可以把索引理解为key-value集合,正排的key为docid,倒排的key为字段值)    

标签:倒排,16,doc2,doc,Price,doc1,索引,values,正排
来源: https://www.cnblogs.com/cc299/p/11032857.html