分析vs not_analyzed:存储大小

ibi*_*886 2 elasticsearch

我最近使用ElasticSearch 2.开始当我已了解分析 VS not_analyzed在映射,not_analyzed应在存储更好(https://www.elastic.co/blog/elasticsearch-storage-the-true-story-2.0HTTPS ://www.elastic.co/blog/elasticsearch-storage-the-true-story).出于测试目的,我创建了一些索引,其中包含所有String字段(默认情况下),然后我创建了一些其他索引,其中所有字段都是not_analyzed,当我检查索引的大小并且我看到索引时出现了not_analyzed字符串 40%!! 我在每个索引中插入相同的文档(35000个文档).

知道为什么会这样吗?我的文档是简单的JSON文档.我在每个文档中有60个字符串字段,我想将其设置为not_analyzed,我尝试将每个字段设置为未分析并创建动态模板.

我编辑添加映射,虽然我认为它没有什么特别之处:

    {
        "mappings": {
            "my_type" : {
                          "_ttl" : { "enabled" : true, "default" : "7d" },
                          "properties" : {
                                "field1" : {
                                    "properties" : {
                                        "field2" : {
                                            "type" : "string", "index" : "not_analyzed"
                                        }
                                        more not_analyzed String fields here
                                  ...
                              ...
                          ...
}
Run Code Online (Sandbox Code Playgroud)

Pet*_*ses 6

not_analyzed字段仍然被编入索引.他们事先没有对它们进行任何转换("分析" - 用Lucene的说法).

举个例子:

(文件1)"快速的棕色狐狸跳过懒狗"

(Doc 2)"像狐狸一样懒惰"


  1. 标准分析器创建的简化发布列表(analyzed字符串字段的默认值- 标记化,小写,删除停用词):
"brown": [1]  
"dog": [1]  
"fox": [1,2]  
"jumped": [1]  
"lazy": [1,2]  
"over": [1] 
"quick": [1]
Run Code Online (Sandbox Code Playgroud)

30个字符的字符串数据


  1. "index": "not_analyzed"以下内容创建的简化发布列表:
"The quick brown fox jumped over the lazy dog": [1]  
"Lazy like the fox": [2] 
Run Code Online (Sandbox Code Playgroud)

62个字符的字符串数据


分析导致输入被标记化并标准化,以便能够使用术语查找文档.

但结果是,文本单元被缩减为标准化术语(与整个字段相比not_analyzed),并且所有文档中的所有冗余(标准化)术语都折叠为单个逻辑列表,从而节省了通常所有的空间由重复的术语和停用词消耗.