Search 使用ClickHouse的问题

Search 使用ClickHouse的问题,search,case-insensitive,druid,clickhouse,Search,Case Insensitive,Druid,Clickhouse,我们正在改造我们现有的系统,它使用MYSQL数据库来处理以下类型的数据 交易和订单相关数据 客户信息 产品信息 我们需要查询这些数据并拉入统计数据,还需要过滤、方面和段列表以及KPI 我们尝试了ClickHouse、Druid和DGraph对样本数据进行了一些测试,以进行基准测试,并检查哪个数据库适合我们的需要 我喜欢德鲁伊DB的几件事是 Druid搜索查询:列出所有匹配项以及维度(列名)和相同的计数/出现次数。 链接: utf8mb4支持 全文搜索 不区分大小写的搜索 我们发现Clic

我们正在改造我们现有的系统,它使用MYSQL数据库来处理以下类型的数据

  • 交易和订单相关数据
  • 客户信息
  • 产品信息
我们需要查询这些数据并拉入统计数据,还需要过滤、方面和段列表以及KPI

我们尝试了ClickHouse、Druid和DGraph对样本数据进行了一些测试,以进行基准测试,并检查哪个数据库适合我们的需要

我喜欢德鲁伊DB的几件事是

  • Druid搜索查询:列出所有匹配项以及维度(列名)和相同的计数/出现次数。 链接:
  • utf8mb4支持
  • 全文搜索
  • 不区分大小写的搜索
我们发现ClickHouse比MYSQL和Druid数据库更快。但是有以下问题

  • 无法执行类似druid的搜索查询(返回维度和引用)。有什么解决办法来实现这一点吗
  • 不区分大小写的搜索。我们如何处理这件事?ClickHouse区分大小写,对吗
  • utf8mb4支持?我们如何保存/存储utf8不支持的特殊字符或少数表情符号?
    我们在MYSQL中遇到了类似的问题,将排序规则更改为utf8mb4解决了这个问题。我们在ClickHouse中如何实现这一点
您的建议可以帮助我们克服这些挑战,做出更好的决策

提前谢谢

无法执行类似druid的搜索查询(返回维度和引用)。有什么解决办法来实现这一点吗

该功能的工作原理大致如下:

SELECT interval, dim1, COUNT(*) FROM my_table WHERE condition GROUP BY interval, dim1
UNION ALL
SELECT interval, dim2, COUNT(*) FROM my_table WHERE condition GROUP BY interval, dim2
UNION ALL
...
不区分大小写的搜索。我们如何处理这件事?ClickHouse区分大小写,对吗

有多个选项,例如
positioncaseinsensitivieutf8(干草堆、针)
函数或与正则表达式匹配:

utf8mb4支持?我们如何保存/存储utf8不支持的特殊字符或少数表情符号

ClickHouse中的字符串是任意字节序列,因此您可以在其中存储任何您想要的内容,但您可能应该检查可用函数是否与您的用例匹配

无法执行类似druid的搜索查询(返回维度和引用)。有什么解决办法来实现这一点吗

该功能的工作原理大致如下:

SELECT interval, dim1, COUNT(*) FROM my_table WHERE condition GROUP BY interval, dim1
UNION ALL
SELECT interval, dim2, COUNT(*) FROM my_table WHERE condition GROUP BY interval, dim2
UNION ALL
...
不区分大小写的搜索。我们如何处理这件事?ClickHouse区分大小写,对吗

有多个选项,例如
positioncaseinsensitivieutf8(干草堆、针)
函数或与正则表达式匹配:

utf8mb4支持?我们如何保存/存储utf8不支持的特殊字符或少数表情符号


ClickHouse中的字符串是任意字节序列,因此您可以在其中存储任何您想要的内容,但您可能应该检查可用的函数是否与您的用例匹配。

Hi@Ivan Blinkov,谢谢您的回复。但是上面的查询:在您提到dim1和dim2的地方,我不应该识别它并查询相同的内容。Druid search自行识别并返回相同的维度和事件,如果需要,我可能希望从列表中查询特定维度/事件(搜索查询的响应)。这也是我想在ClickHouse中实现的。@AnishNair我仍然看不出它有什么根本性的不同,因为表结构是固定的,而且您已经提前知道了所有这些。如果您的用例更像是未知的键值对,您可以将它们放入列中,然后通过数组JOIN+GROUP覆盖它。您好@Ivan Blinkov,谢谢您的回复。但是上面的查询:在您提到dim1和dim2的地方,我不应该识别它并查询相同的内容。Druid search自行识别并返回相同的维度和事件,如果需要,我可能希望从列表中查询特定维度/事件(搜索查询的响应)。这也是我想在ClickHouse中实现的。@AnishNair我仍然看不出它有什么根本性的不同,因为表结构是固定的,而且您已经提前知道了所有这些。如果您的用例更像是未知的键值对,那么您可以将它们放入列中,然后只在其上数组JOIN+GROUP。不区分大小写的ILIKE运算符从版本20.6.3.28-开始添加到CH中。不区分大小写的ILIKE运算符从版本20.6.3.28-开始添加到CH中。