У меня есть этот сложный запрос для MySQL , который подсчитывает уникальные посещения за каждый день. Я хочу сделать это быстрее, используя ElasticSearch .
Представьте себе таблицу , например:
- id |site_id |создал_ ________ |stat_cookie_hash
- 10 |12346 |2019-11-11 15:42:24 |sf2f2eghasdh2nvr
- 11 |12346 |2019-10-26 09:41:09 |jk67j97jkhjghklj
- 12 |12346 |2019-10-26 14:25:01 |внуои96июи60ю
- 13 |12346 |2019-09-01 18:12:54 |zxcqscgscv1vcdcv
Результат запроса будет выглядеть следующим образом:
- 2019-11-11 |1
- 2019-10-26 |2
- 2019-09-01 |1
Сам запрос SQL :
SELECT day, COUNT(*) as cnt
FROM (SELECT DISTINCT stat_cookie_hash, DATE(DATE_ADD(created_at, INTERVAL :timezone MINUTE)) as day
FROM stat_visitor
WHERE site_id=:site_id) AS T
GROUP BY day
ORDER BY day DESC
: часовой пояс - целое число, например 180
: site_id - целое число, подобное 40
Тот же, но с заменой:
SELECT day, COUNT(*) as cnt
FROM (SELECT DISTINCT stat_cookie_hash, DATE(DATE_ADD(created_at, INTERVAL 180 MINUTE)) as day
FROM stat_visitor
WHERE site_id=40) AS T
GROUP BY day
ORDER BY day DESC
Версия ElasticSearch:
{
"version" : {
"number" : "7.4.1",
"build_flavor" : "default",
"build_type" : "rpm",
"build_hash" : "fc0eeb6e2c25915d63d871d344e3d0b45ea0ea1e",
"build_date" : "2019-10-22T17:16:35.176724Z",
"build_snapshot" : false,
"lucene_version" : "8.2.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
}
}
Я совершенно новичок в ElasticSearch, поэтому яне знаю, как с этим справиться. Помогите мне, пожалуйста!
Было бы здорово, если бы вы знали Yii2 Framework и могли бы показать мне, как переписать SQL-запрос с расширением yii2 -asticsearch.