我有一个包含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值,这很难。
谢谢
答案 0 :(得分:1)
从elasticsearch 2.0开始,我们做了一些caching changes,例如:
想知道你是否打到最后一个。 请注意,我们这样做是因为文件系统缓存可能比内部缓存更好。
您可以尝试使用bool查询而不是过滤查询BTW吗? Filtered has been deprecated(并在5.0中删除)。看看它的表现如何?