有没有办法找到索引中各个字段的大小?
我有10个字段,_source被禁用。我没有这些字段的映射。
启用_all后,磁盘上的索引大小为95 mb
如果没有_all(禁用),磁盘上的索引大小为70 mb
我的理解是_all存储所有字段的副本。那么_all的索引大小不会是两倍吗?为什么差异只有15 MB而不是47mb?
由于
答案 0 :(得分:3)
_all
不是所有字段的副本;它只是存储所有其他字段值的另一个字段。
假设我们在索引中只有三个文档(d1
,d2
和d3
),只有两个字段f1
和f2
。见下文:
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
是一个仅限索引的字段(默认情况下,无论如何)。也就是说,它没有存储。存储和索引字段(可以是搜索结果并且可以使用搜索结果检索的任何字段)必须具有构建的反向索引,并且还必须以原始形式存储以便稍后检索。存储整个字段内容可能会占用大量存储空间。