elasticsearch Elasticsearch:获取索引的最新大小,elasticsearch,elasticsearch" /> elasticsearch Elasticsearch:获取索引的最新大小,elasticsearch,elasticsearch" />

elasticsearch Elasticsearch:获取索引的最新大小

elasticsearch Elasticsearch:获取索引的最新大小,elasticsearch,elasticsearch,问:如何获取自上次刷新以来最新的索引(使用\u stats)的大小 我正在Elasticsearch集群上进行性能测试。该守则实际上是: Create INDEX Set refresh_interval to -1 (don't refresh while inserting) Insert 2000 documents into INDEX Set refresh_interval back to 1 (default) Force a refresh of INDEX Get _stat

问:如何获取自上次刷新以来最新的索引(使用
\u stats
)的
大小

我正在Elasticsearch集群上进行性能测试。该守则实际上是:

Create INDEX
Set refresh_interval to -1 (don't refresh while inserting)
Insert 2000 documents into INDEX
Set refresh_interval back to 1 (default)

Force a refresh of INDEX
Get _stats of INDEX (particularly to get the size)
我的理解是,当文档被保存时,它们首先被插入到ES in内存缓冲区中。强制刷新将导致ES为仍位于缓冲区中的文档创建Lucene段。(在其他一些情况下,文档缓冲区也将清空为Lucene段。)

我相信,这将保证在这一点上的文件是可搜索的。我希望ES使可搜索的文档也反映在
\u stats
中。但是,我发现stats请求的大小在非确定性方面不准确(例如,它可能是520字节,而不是23602字节)

我尝试在刷新之后,在调用
\u stats
之前休眠我的进程,并取得了不同的成功。但我想知道是否有一个合适的、一致的解决方案来获取最新的统计数据?(或者如果我的理解不正确的话)

示例

插入2000个文档后,我立即手动(反复)运行
\u stats
,并检查结果。在大约5秒的时间内,我将看到:

"primaries": {
  "docs": {
    "count": 2000,
    "deleted": 0
  },
  "store": {
    "size_in_bytes": 520,
    "throttle_time_in_millis": 0
然后(随着ES突然与最近的变化保持一致),我将看到:

"primaries": {
  "docs": {
    "count": 2000,
    "deleted": 0
  },
  "store": {
    "size_in_bytes": 23602,
    "throttle_time_in_millis": 0

只要不添加新文档,此结果将无限期地持续下去。

我认为这与
索引存储\u统计\u刷新\u间隔\u设置有关,请参阅

默认值为10秒,但您可以通过
index.store.stats\u refresh\u interval
更改该值。我不知道这会带来多少开销,所以如果你考虑改变价值,那么仔细测试一下。
这也用于单元测试,请参见

什么使您认为“这看起来是错误的”?给我们看一些数字和你的期望。啊,对。我发现
\u stats
调用中的索引大小不正确。我使用
bulk
调用索引1000个文档(每个文档包含一个时间戳、一个double和一个字符串列表)。我在索引上调用
refresh
。然后我调用索引上的
stats
。响应显示索引总共是130字节。我可以立即从Sense手动调用
\u stats
,看到现在有135976个字节(Marvel在索引摘要页面上也显示了这个更大、合理的数字)。你可以显示你正在运行的命令列表(即你的代码)吗?我可以,但它相当长。不过,更一般地说,我希望对ES实际在做什么有一些直觉,我称之为
\u stats
。我会再找一些,然后尽快回来。我很担心你的刷新电话,特别是因为你有一个打字错误:
refresh\u interal
应该读
refresh\u interval
谢谢,很好的发现。因此,从一个更一般的角度来看,我认为这个设置可以通过以下方式进行更改:
PUT/my_index{“settings”:{“index.store.stats\u refresh\u interval”:1}
该设置应该是一个带有时间值的字符串,因此创建一个具有1秒stats refresh interval的索引将是
PUT/my_index{“settings”:“index.store.stats\u refresh\u interval”:“1s”}