docvalue and fielddata

大部分字段类型默认被索引的(inverted index),可以被搜索
search: 哪个文档有这个词
sort&aggregations: look up the document and find the terms that it has in a field.这个文档的这个字段的值是什么

doc_values

  1. 磁盘上的数据结构,在文档索引的时候建立,数据可以被访问。
  2. 和_source存的值是一样的,采用column-oriented fashion,更高效的排序和聚合
  3. doc_values的默认值是true,如果这个字段不需要排序和聚合,不需要在脚本里访问,可以禁用doc_values来节约磁盘空间,
    仍然可以被查询
  4. 可以被分词类型不支持doc_values
"session_id": { 
     "type": "keyword",
     "doc_values": false
}

fielddata

  1. text fields 不支持doc_values,
  2. text使用fielddata,一种在查询时期生成在缓存里的数据结构
  3. 当字段在首次sort,aggregations,or in a script时创建,读取磁盘上所有segment的的倒排索引,反转 term<->doc 的关系,加载到jvm heap,it remains there for the lifetime of the segment.
  4. 很耗内存,默认禁用fielddata
  5. text field 是先分词再索引的,因此,应该使用不分词的keyword用来聚合
curl -XPUT 'localhost:9200/my_index?pretty' -H 'Content-Type: application/json' -d'
{
  "mappings": {
    "my_type": {
      "properties": {
        "my_field": { 
          "type": "text",
          "fields": {
            "keyword": { 
              "type": "keyword"
            }
          }
        }
      }
    }
  }
}
'
posted @ 2017-11-13 18:29  SAI_HIDE  阅读(646)  评论(0编辑  收藏  举报