请教一个关于 clickhouse 和 es 检索的问题

297 天前
 so2back

目前在做一个日志分析模块,里边有个分页展示所有日志的页面,并且可以按条件搜索,主要还是根据关键字去模糊搜索日志,类似 like '%关键字%' 这种。

我翻了下 clickhouse 的官方文档,找到 like 这种查询的优化可以用 tokenbf_v1 索引,但是我模拟了 1 亿数据量的日志,发现直接用 like '%%'并不走索引,只能用 hasToken()函数才行,但是这种函数的方式更像是分词匹配(确实这个索引的逻辑也是这样),不是 like 原本的逻辑。而且,tokenbf_v1 索引在低命中率的时候效果才明显,高命中率的时候依旧等于全表扫描。

我测试下来发现 clickhouse 并不能完全满足我。我想请教下 clickhouse 是否还有其他的优化是我未知的,或者 es 是否可以满足这种需求( es 我还没怎么接触过)。现在我测试的 1 亿数据,命中有 900w 数据时,select count()出来的时间要 100 来秒,太慢了。不知道 es 的情况会怎么样。

1133 次点击
所在节点    程序员
9 条回复
dode
297 天前
增加 clickhouse 节点,划分多个独立硬盘分区数据呢
vitoliu
297 天前
clickhouse 不清楚
es 可以通过 ngram+term query 进行查询。只有一亿数据的话可以尝试下,p99 肯定是可以做到一秒以内。
也可以先 suggester 查询,不行再使用 wildcard 查询,但是注意要限制字符长度。
so2back
297 天前
@dode 机器不在我手上,没办法尝试- -
so2back
297 天前
@vitoliu 好的谢谢,起码有个思路,我针对性的去测试一下
vitoliu
297 天前
@so2back #4 嗯,这么说来你们是自运维的 infrastructure ?全文检索场景肯定是优先 ES 的。而且 ES 集群对外能提供多种能力,业务普适性比 clickHouse 强。
vincent7245
296 天前
大哥你是不是用错场景了,clickhouse 是做 OLAP 的,你只结把日志怼进去查是不是太粗暴了
so2back
296 天前
@vincent7245 主要看了好几个像携程、唯品会、石墨啥的博客说把日志从 es 转到 ck ,所以我在想 ck 是不是可行的,但我实际测试下来好像又不是一回事,可能场景不同吧,我这种场景太暴力了,就单纯的 like
kneo
296 天前
like 是很难索引的。而且你返回结果太大了。有必要 900 万条都返回?看得过来嘛……
so2back
296 天前
@kneo 做出来给别人用的,如果真有这么多数据,然后有人这么搜索的话感觉要直接炸裂,到时候就真要回炉重做了- -

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/972341

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX