我在一个视频中遇到了一个示例,当时菜单类别中的产品数量来自弹性搜索:
'aggs' => [
'group_by_category' => [
'terms' => [
'field' => 'categories'
]
]
]
如果您可以使用 Mysql 或 postgres 中的 count 和 group by 函数,为什么这里是弹性的。
我在一个视频中遇到了一个示例,当时菜单类别中的产品数量来自弹性搜索:
'aggs' => [
'group_by_category' => [
'terms' => [
'field' => 'categories'
]
]
]
如果您可以使用 Mysql 或 postgres 中的 count 和 group by 函数,为什么这里是弹性的。
简而言之,ElasticSearch 构建聚合的速度比 MySQL 快得多。而且数据越多,这种差异就越显着。
我测量了生产服务器上的查询执行时间。
服务器选项
Intel(R) Core(TM) i7-4770K CPU @ 3.50GHz,RAM 30Mb,SSD MySQL 5.6,表中的条目数 - 250258 ElasticSearch 2.4,文档数相同。
MySQL
弹性搜索
交货时间
MySQL - 55...76ms,平均 65.5ms
ElasticSearch - 19...24ms,平均 21.5ms
如果有超过 100 万条数据,那么差异会更加显着。
由此我们可以得出结论,选择取决于任务。如果您需要统计菜单类别中的产品数量并且数量不多(< 100),那么您可以放心地使用 MySQL。如果您需要为参数搜索构建过滤器,其中显示每个过滤器值的产品数量,那么您应该只使用 ElasticSearch。
关于该主题的好文章:使用索引,JSON!聚合性能