【发布时间】:2018-11-29 22:07:59
【问题描述】:
我最近开始使用 ElasticSearch 2。由于我不理解映射中的 analyzed 与 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,当我检查索引的大小并看到索引与未分析的字符串增加了 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
...
...
...
}
【问题讨论】:
-
你能发布完整的映射定义吗?可能还有其他属性归因于此。例如,您是否设置了 store 属性。在某些情况下,可能会导致将重复数据添加到索引中。
-
我添加了部分映射,剩下的只是更多的字段。我没有添加商店属性或其他任何东西。
-
为了详细说明我们的两个答案,
not_analyzed的主要用途是用于聚合之类的事情。如果您有(例如)一个类别字段,您希望能够按该类别进行排序/过滤,但可能不关心是否有人真的可以搜索它。这意味着您希望它不被分析为一组标记进行搜索,而是保存为输入的原始字符串。
标签: elasticsearch