带和不带_all的elasticsearch索引大小
elasticsearch index size with and without _all
有没有办法找到索引中各个字段占用的大小?
我有 10 个字段,_source 被禁用。我没有字段的映射。
启用 _all 后磁盘上的索引大小为 95 mb
没有 _all(禁用),磁盘上的索引大小为 70 mb
我的理解是_all 存储所有字段的副本。那么 _all 的索引大小不会加倍吗?为什么差异只是 15 mb 而不是 47mb?
谢谢
_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
并不意味着索引大小会简单地加倍。
除了 bsarkar 的出色回答之外,_all
是一个仅索引字段(默认情况下,无论如何)。也就是说,它不被存储。存储和索引字段,可以是既可以搜索又可以用搜索结果检索的任何字段,必须构建倒排索引,并且还必须以原始形式存储以便以后检索。存储整个字段内容会占用大量存储空间。
有没有办法找到索引中各个字段占用的大小?
我有 10 个字段,_source 被禁用。我没有字段的映射。
启用 _all 后磁盘上的索引大小为 95 mb
没有 _all(禁用),磁盘上的索引大小为 70 mb
我的理解是_all 存储所有字段的副本。那么 _all 的索引大小不会加倍吗?为什么差异只是 15 mb 而不是 47mb?
谢谢
_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
并不意味着索引大小会简单地加倍。
除了 bsarkar 的出色回答之外,_all
是一个仅索引字段(默认情况下,无论如何)。也就是说,它不被存储。存储和索引字段,可以是既可以搜索又可以用搜索结果检索的任何字段,必须构建倒排索引,并且还必须以原始形式存储以便以后检索。存储整个字段内容会占用大量存储空间。