【问题标题】:MySQL match against 'ch' in utf8_czech_ciMySQL 匹配 utf8_czech_ci 中的“ch”
【发布时间】:2017-02-10 11:16:47
【问题描述】:
我们成功地在查询中使用MATCH AGAINST 在我们的数据库中进行搜索,该数据库主要是捷克语,因此我们使用utf8_czech_ci 作为默认排序规则。我们已将查询的最小长度设置为 1,并且禁用了所有停用词。
但是,请考虑搜索单词Schedule。
当你写作时:
-
s : Schedule 找到
-
sc:没有找到
-
sch : Schedule 找到
看起来它将ch 视为单个字符(这在捷克语中是正确的),但在我们进行全文搜索时肯定是不正确的。
有没有办法避免这种行为?
【问题讨论】:
标签:
mysql
full-text-search
collation
full-text-indexing
【解决方案1】:
是的,utf8_czech_ci 将 ch 视为单个字母,介于 h 和 i 之间。 Č 和 č 是相等的,但毕竟是 c。其他带有 Caron 的字母也是如此。
This 提供各种 utf8 排序规则的排序规则。
我认为您的观察对于 排序规则是正确的。 “schedule”是捷克语词吗?
为避免这种情况,请为该列选择另一个 utf8 COLLATION,并重建 FULLTEXT 索引。 utf8_bin 和 utf8_general_ci 和 utf8_unicode_ci 可能是候选人。您可能需要有两列(和索引)具有相同的文本,但不同的排序规则。然后选择列以控制您要搜索的语言。
你在“比较”字符串吗?如果是这样,排序规则将产生很大的不同——捷克语中的“say”
(至少就本题而言,utf8mb4 的操作与 utf8 相同。)