【发布时间】:2014-03-21 14:15:34
【问题描述】:
假设我有一千个键,我想存储相关的值。直观的方法似乎类似于
{
"key1":"someval",
"key2":"someotherval",
...
}
对于具有数千个键的弹性搜索索引来说,这是一种糟糕的设计模式吗?以这种方式引入的每个键是否会为索引下的每个文档产生开销?
【问题讨论】:
标签: lucene elasticsearch
假设我有一千个键,我想存储相关的值。直观的方法似乎类似于
{
"key1":"someval",
"key2":"someotherval",
...
}
对于具有数千个键的弹性搜索索引来说,这是一种糟糕的设计模式吗?以这种方式引入的每个键是否会为索引下的每个文档产生开销?
【问题讨论】:
标签: lucene elasticsearch
如果您知道您将拥有的键数量有上限,那么几千个字段不是问题。
问题是当你有一组无限的键时,例如当键从一个值派生时,您将拥有一个不断增长的映射,因此还有集群状态。它还可能导致古怪的搜索。
这是一个足够常见的问题/问题,我在Troubleshooting Elasticsearch searches, for Beginners 上的文章中专门针对它进行了一节。
简而言之,数千个字段没有问题 - 无法控制映射。
【讨论】:
Elasticsearch 不适合文档中的 1000 多个键值模式。如果您想实时更新它们,请尝试使用 redis 或 riak。
如果您在文档/记录中有数千个键,基本上它们会变成字段,而值会变成文本和索引。
从大数据的信息检索角度来看,建议使用较少的大字段而不是大量的小字段,以获得更快的搜索性能。
【讨论】: