作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们成功地在查询中使用 MATCH AGAINST
来搜索我们的数据库(主要是捷克语),因此我们使用 utf8_czech_ci
作为默认排序规则。我们已将查询的最小长度设置为 1,并且禁用了所有停用词。
但是,请考虑搜索单词Schedule
。
当你写下:
s
:找到时间表
sc
:没有找到sch
:找到时间表
看起来它将 ch
视为单个字符(这在捷克语中是正确的),但当我们进行全文搜索时肯定是不正确的。
有办法避免这种行为吗?
最佳答案
是的,utf8_czech_ci 将 ch
视为位于 h
和 i
之间的单个字母。 Č
和 č
相等,但都位于 c
之后。对于其他带有卡隆的字母也是如此。
This提供各种 utf8 排序规则的排序规则。
我认为您的观察对于该排序规则是正确的。 “schedule”是捷克语单词吗?
要避免这种情况,请为该列选择另一个 utf8 COLLATION
,并重建 FULLTEXT
索引。 utf8_bin
和 utf8_general_ci
和 utf8_unicode_ci
可能是候选者。您可能需要有两列(和索引)具有相同的文本,但排序规则不同。然后选择该列以控制您要使用的搜索语言。
您正在“比较”字符串吗?如果是这样,排序规则将产生很大的差异 - 捷克语中的“say”<“see”<“sch”,但没有任何(?)其他排序规则。
(utf8mb4 的操作方式与 utf8 相同,至少就本问题而言是如此。)
关于MySQL 与 utf8_czech_ci 中的 'ch' 匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42158072/
我是一名优秀的程序员,十分优秀!