我最近使用ElasticSearch 2.开始当我已了解分析 VS not_analyzed在映射,not_analyzed应在存储更好(https://www.elastic.co/blog/elasticsearch-storage-the-true-story-2.0和HTTPS ://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 ... ... ... }
Peter Dixon-.. 6
not_analyzed
字段仍然被编入索引.他们事先没有对它们进行任何转换("分析" - 用Lucene的说法).
举个例子:
(文件1)"快速的棕色狐狸跳过懒狗"
(Doc 2)"像狐狸一样懒惰"
标准分析器创建的简化发布列表(
analyzed
字符串字段的默认值- 标记化,小写,删除停用词):
"brown": [1] "dog": [1] "fox": [1,2] "jumped": [1] "lazy": [1,2] "over": [1] "quick": [1]
30个字符的字符串数据
由
"index": "not_analyzed"
以下内容创建的简化发布列表:
"The quick brown fox jumped over the lazy dog": [1] "Lazy like the fox": [2]
62个字符的字符串数据
分析导致输入被标记化并标准化,以便能够使用术语查找文档.
但结果是,文本单元被缩减为标准化术语(与整个字段相比not_analyzed
),并且所有文档中的所有冗余(标准化)术语都折叠为单个逻辑列表,从而节省了通常所有的空间由重复的术语和停用词消耗.
not_analyzed
字段仍然被编入索引.他们事先没有对它们进行任何转换("分析" - 用Lucene的说法).
举个例子:
(文件1)"快速的棕色狐狸跳过懒狗"
(Doc 2)"像狐狸一样懒惰"
标准分析器创建的简化发布列表(
analyzed
字符串字段的默认值- 标记化,小写,删除停用词):
"brown": [1] "dog": [1] "fox": [1,2] "jumped": [1] "lazy": [1,2] "over": [1] "quick": [1]
30个字符的字符串数据
由
"index": "not_analyzed"
以下内容创建的简化发布列表:
"The quick brown fox jumped over the lazy dog": [1] "Lazy like the fox": [2]
62个字符的字符串数据
分析导致输入被标记化并标准化,以便能够使用术语查找文档.
但结果是,文本单元被缩减为标准化术语(与整个字段相比not_analyzed
),并且所有文档中的所有冗余(标准化)术语都折叠为单个逻辑列表,从而节省了通常所有的空间由重复的术语和停用词消耗.