我最近开始使用 ElasticSearch 2。据我了解analyzed vs 未分析在映射中, not_analyzed 在存储中应该更好(https://www.elastic.co/blog/elasticsearch-storage-the-true-story-2.0 https://www.elastic.co/blog/elasticsearch-storage-the-true-story-2.0 and https://www.elastic.co/blog/elasticsearch-storage-the-true-story https://www.elastic.co/blog/elasticsearch-storage-the-true-story)。
出于测试目的,我创建了一些索引,其中所有 String 字段都已分析(默认情况下),然后我创建了一些其他索引,所有字段都为 not_analyzed,当我检查索引的大小时,我发现索引与not_analyzed 字符串为 40%bigger!!我在每个索引中插入相同的文档(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
...
...
...
}
not_analyzed
田野依然indexed。它们只是没有事先应用任何转换(“分析”——用 Lucene 的话说)。
举个例子:
(文档 1)“敏捷的棕色狐狸跳过了懒狗”
(文档 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
),以及所有冗余(标准化)项跨所有文档被折叠成单一逻辑列表节省您通常会被重复术语和停用词占用的所有空间。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)