如何优化对最近记录的搜索

时间:2019-05-10 17:10:40

标签: elasticsearch

我们使用ElasticSearch存储历史搜索数据。索引旨在按天从模板拆分。所有字段均为静态,可搜索字段已建立索引,其余字段均已禁用。

该索引经常被更新和搜索。更新是在其中添加文档;搜索将检索500个最新历史记录。它在低工作负载下表现不错,但是当我们在压力测试下(例如每秒150次更新+搜索操作)进行测试时,它的执行速度会慢5倍。

索引的大小不是很大,每天大约1GB。我们每30天轮换一次数据。

为此,我们配置了一个ES群集,其中包括1个主节点(4VCPU,8GB RAM)和5个数据节点(8VCPU,24GB RAM)。考虑到索引大小,我们将shard设置为0,将副本设置为4。在每个数据节点上,我们让ES使用12GB RAM,并将其他12GB分配给堆。

我们尝试增加刷新间隔之类的方法,但似乎没有效果:如果负载很轻,搜索时间为30毫秒;当负载很高时,可以跳到220毫秒。

我检查了缓存情况,这很糟糕:

 "primaries": {
    "query_cache": {
      "memory_size_in_bytes": 0,
      "total_count": 7883586,
      "hit_count": 0,
      "miss_count": 7883586,
      "cache_size": 0,
      "cache_count": 0,
      "evictions": 0
    }
  },
  "total": {
    "query_cache": {
      "memory_size_in_bytes": 0,
      "total_count": 39982611,
      "hit_count": 14,
      "miss_count": 39982597,
      "cache_size": 0,
      "cache_count": 6,
      "evictions": 6

此设置的每种可能都不是最优的,所以我愿意接受所有建议。

谢谢!

0 个答案:

没有答案