问:如何获取自上次刷新以来最新的索引size
(使用_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)
我的理解是,当文档are indexed时,它们首先被插入到ES内存缓冲区中。强制刷新将导致ES为仍位于缓冲区中的文档创建Lucene段。 (还有一些其他情况,文档缓冲区也会变成Lucene段。)
我相信refreshing the index会保证到目前为止可以搜索到的文档。我希望ES可搜索的文档也反映在_stats
中。但是,我发现统计信息请求的大小是非确定性不准确的(例如,它可能是520字节而不是23602)。
我已经尝试在_stats
调用之前刷新后清理我的进程,并取得了不同的成功。但我想知道是否有一个适当的,一致的解决方案来获取最新的统计数据? (或者,如果我的理解中的某些内容不正确)。
示例
在插入2000个文档后,我立即在Sense中手动(重复)运行_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
只要没有添加新文档,此结果将无限期地持续存在。
答案 0 :(得分:2)
我认为这与INDEX_STORE_STATS_REFRESH_INTERVAL_SETTING
有关,请参阅https://github.com/elastic/elasticsearch/blob/5.1/core/src/main/java/org/elasticsearch/index/store/Store.java#L133-L134
默认为10秒,但您可以通过index.store.stats_refresh_interval
更改值。我不知道会引入多少性能开销,所以如果考虑更改值,请仔细测试。