【问题标题】:Elasticsearch caching a single field for quick responseElasticsearch 缓存单个字段以实现快速响应
【发布时间】:2016-06-28 22:29:52
【问题描述】:

我有一个由 10 个节点组成的集群,我每天在其中索引大约 1 亿条记录。总计接近 60 亿条记录。我不断地加载数据。每条记录有大约 75 个与之关联的字段。我 99% 的查询都是基于同一个字段查询。基本上从 groupid = 'value' 的表中选择 *。大多数返回的查询会带回大约一百条记录。

我的查询目前运行前 2 次大约需要 30 秒,然后以毫秒为单位。问题是所有用户查询都在搜索不同的 groupID,因此在第三次运行之前,大部分查询都会很慢。

是否可以“缓存” groupid 字段,以便获得亚秒级查询。

我当前的查询如下所示。 (伪查询)(我正在使用我认为更好的非分析字段?)

query : { 
  filtered : { 
     filter : { 
        "term" : { groupID : "valuex" } 
              }
             }
         }

我已经研究过但不知道该怎么做。我已经研究过 doc_values = yes 和可能的字段缓存?

我不关心得分,总分。我唯一的用例是过滤掉记录,只带回 50 亿个中具有正确 groupID 的 100 个左右。

我们在每台服务器上大约有 64G 内存。

只是寻求有关如何实现最佳性能/缓存的帮助?或任何其他有帮助的东西。

我考虑过路由,但根据我们的 groupid 值这会很困难。

谢谢

【问题讨论】:

    标签: elasticsearch lucene


    【解决方案1】:

    从 elasticsearch 2.0 开始,我们做了一些caching changes,比如:

    • 跟踪最近使用的 256 个查询
    • 仅缓存出现 5 次或以上的那些
    • 不缓存少于 10000 个文档或 3% 的索引文档的段

    想知道你是否击中了最后一个。 请注意,我们这样做是因为文件系统缓存可能比内部缓存更好。

    您可以尝试使用布尔查询而不是过滤查询顺便说一句吗? Filtered has been deprecated(并在 5.0 中被删除)。看看它的表现如何?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-06
      • 2021-04-11
      • 2019-01-31
      • 1970-01-01
      • 1970-01-01
      • 2013-09-10
      • 2016-06-19
      相关资源
      最近更新 更多