一、DocValues机制
### --- 为什么要有 Doc Values
~~~ ElasticSearch 之所以搜索这么快速,归功于它的 倒排索引的设计,然而它也不是万能的,
~~~ 倒排索引的检索性能是非常快的,但是在字段值排序时却不是理想的结构。
~~~ 下面是一个简单的 倒排索引的结构
### --- Doc Values机制结构
~~~ 如上表便可以看出,他只有词对应的 doc ,但是并不知道每一个 doc 中的内容,
~~~ 那么如果想要排序的话每一个 doc都去获取一次文档内容岂不非常耗时?
~~~ DocValues 的出现使得这个问题迎刃而解。
~~~ 字段的 doc_values 属性有两个值, true、false。默认为 true ,即开启。
~~~ 当 doc_values 为 fasle 时,无法基于该字段排序、聚合、在脚本中访问字段值。
~~~ 当 doc_values 为 true 时,ES 会增加一个相应的正排索引,这增加的磁盘占用,
~~~ 也会导致索引数据速度慢一些
Term Doc_1 Doc_2
-------------------------
quick | | X
the | X |
brown | X | X
dog | X |
dogs | | X
fox | X |
foxes | | X
in | | X
jumped | X |
lazy | X | X
leap | | X
over | X | X
summer | | X
the | X |
------------------------
### --- 举例:
DELETE /person
PUT /person
{
"mappings" : {
"properties" : {
"name" : {
"type" : "keyword",
"doc_values": true
},
"age" : {
"type" : "integer",
"doc_values": false
}
}
}
}