带有和不带_all的elasticsearch索引大小

时间:2015-04-08 02:09:32

标签: lucene elasticsearch

有没有办法找到索引中各个字段的大小?

我有10个字段,_source被禁用。我没有这些字段的映射。

启用_all后,磁盘上的索引大小为95 mb

如果没有_all(禁用),磁盘上的索引大小为70 mb

我的理解是_all存储所有字段的副本。那么_all的索引大小不会是两倍吗?为什么差异只有15 MB而不是47mb?

由于

2 个答案:

答案 0 :(得分:3)

_all不是所有字段的副本;它只是存储所有其他字段值的另一个字段。

假设我们在索引中只有三个文档(d1d2d3),只有两个字段f1f2。见下文:

d1
{
    "f1": "v1",
    "f2": "v2"
},    
d2
{
    "f1": "v2",
    "f2": "v2"
},
d3
{
    "f1": "v1",
    "f2": "v1"
}

现在Lucene将这些数据存储在倒排索引中,如下所示。

字段f1的反转索引:

"v1" -> "d1", "d3"
"v2" -> "d2"

字段f2的反转索引:

"v1" -> "d3",
"v2" -> "d1", "d2"

启用_all后,_all字段会有一个额外的倒排索引。

字段_all的反转索引:

"v1" -> "d1", "d3"
"v2" -> "d1", "d2"

您可以清楚地看到,没有_all的发布列表大小是6个文档,而使用_all发布列表大小是10个文档而不是12个文档。

这只是一个简单的例子,可以证明启用_all并不意味着索引大小只会翻倍。

答案 1 :(得分:0)

除了bsarkar的优秀答案外,_all是一个仅限索引的字段(默认情况下,无论如何)。也就是说,它没有存储。存储和索引字段(可以是搜索结果并且可以使用搜索结果检索的任何字段)必须具有构建的反向索引,并且还必须以原始形式存储以便稍后检索。存储整个字段内容可能会占用大量存储空间。