提问者:小点点

如何通过后端进行基于过滤的计数取数


让我们假设我们有一个相当大的产品数据库,例如50K移动电话。 我们将这些数据存储在弹性搜索中。 现在我有一个手机产品列表页面,在那里我列出所有的手机10一次使用分页与他们的基本细节。 该页也有一个过滤部分像品牌,价格范围,RAM,平均。 评级,发布日期和更多的规格。

现在,当我获取Samsung公司的mobile和6 GB ram时,我激发了一个弹性查询,并得到结果和它们的总数。 这样就使得计数查询变得复杂,总计数依赖于过滤器,这种类型的查询增加了系统的负载。

我想要一个系统,它将计算计数的过滤器一次,并保存它的某处,这样我就不需要计算计数为同一过滤器再次,从而减少复杂性开销为相同的过滤器一次又一次。 用你的知识让我知道我该如何解决这个问题,或者我应该如何维护我的系统?

任何参考或文章也将被感激。


共2个答案

匿名用户

弹性搜索提供了自己的缓存技术,您可以使用这些设置来缓存特定的查询

GET /my_index/_search?request_cache=true
{
  "size": 0,
  "aggs": {
    "popular_colors": {
      "terms": {
        "field": "colors"
      }
    }
  }
}

这里有一个链接,了解更多细节。 请注意,您有这么多用于缓存ElasticSearch的硬件配置。 https://www.elastic.co/guide/en/elasticsearch/reference/current/shard-request-cache.html#_enabling_and_disabling_caching_per_request。

另外,如果您有多个数据节点,并且只有很少的索引经常对其执行查询和聚合,并且您有不同节点的不同硬件配置,那么您应该研究elasticsearch热节点和冷节点的概念,并将您的imp索引放在热节点中,而不是缓存所有内容

https://www.elastic.co/blog/hot-warm-architecture-in-elasticsearch-5-x

https://www.elastic.co/blog/implementation-hot-warm-cold-in-elasticsearch-with-index-lifecycle-management

匿名用户

你能用你正在使用的复杂计数查询的示例更新上面的帖子吗? 这将有助于确定您面临的问题。 谢啦!