Elasticsearch缓存单个字段以便快速响应

时间:2016-06-28 11:47:56

标签: elasticsearch lucene

我有一个包含10个节点的集群,我每天为1亿条记录编制索引。总计接近60亿条记录。我一直在加载数据。每条记录都有大约75个与之相关的字段。 99%的查询都基于相同的字段查询。基本上从tableid ='value'的表中选择*。返回的大多数查询带回大约一百条记录。

我的查询目前大约需要30秒才能运行前2次,然后是毫秒。问题是所有用户查询都在搜索不同的groupID,因此查询在大多数情况下都会变慢,直到第三次运行它为止。

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

我当前的查询是这样的。 (Psuedo-query)(我正在使用我认为更好的非分析字段?)

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

我已经研究过并且不确定如何解决这个问题。我调查了doc_values = yes和可能的字段缓存?

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

每台服务器上都有64G内存。

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

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

谢谢

1 个答案:

答案 0 :(得分:1)

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

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

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

您可以尝试使用bool查询而不是过滤查询BTW吗? Filtered has been deprecated(并在5.0中删除)。看看它的表现如何?