Sphinx可以处理unicode规范化表单吗?
我知道Sphinx可以处理unicode规范化表单吗?,sphinx,unicode-normalization,Sphinx,Unicode Normalization,我知道charset\U表设置允许U+00E9->e将'ee'映射到'e'。然而,如果你用U+0065U+0301代替U+00E9(这是“e”的“分解”形式,只是“e”后跟一个尖锐的重音),那么斯芬克斯会将U+0301视为空白,并将单词分解 例如: mysql> CALL KEYWORDS('Crème brûlée', 'recipes_rt', 1); +------+-----------+------------+------+------+ | qpos | tokenized
charset\U表
设置允许U+00E9->e
将'ee'映射到'e'。然而,如果你用U+0065U+0301代替U+00E9(这是“e”的“分解”形式,只是“e”后跟一个尖锐的重音),那么斯芬克斯会将U+0301视为空白,并将单词分解
例如:
mysql> CALL KEYWORDS('Crème brûlée', 'recipes_rt', 1);
+------+-----------+------------+------+------+
| qpos | tokenized | normalized | docs | hits |
+------+-----------+------------+------+------+
| 1 | creme | creme | 3 | 3 |
| 2 | brulee | brulee | 2 | 2 |
+------+-----------+------------+------+------+
2 rows in set (0.00 sec)
mysql> CALL KEYWORDS('Crème brûlée', 'recipes_rt', 1);
+------+-----------+------------+------+------+
| qpos | tokenized | normalized | docs | hits |
+------+-----------+------------+------+------+
| 1 | creme | creme | 3 | 3 |
| 2 | brule | brule | 0 | 0 |
| 3 | e | e | 3 | 3 |
+------+-----------+------------+------+------+
3 rows in set (0.15 sec)
这里需要类似NFKC Unicode规范化的东西,但我在文档中看不到任何提及。不确定如何“可伸缩地”(即所有形式)处理它,但个人可能可以使用
regexp\u过滤器来完成
虽然已经说过,但是只需将U+0301(和其他“字符”)添加到忽略\U字符
?
它们消失了,只留下“uncented”字符(e),因为我正在做ee->e
,然后我添加了ignore\u字符来处理组合字符。然而,我不确定哪个范围是处理所有案例的“完整”范围。我也做了你提到的组合变音符号(ignore_chars=U+0300..U+036F
),但不确定这是否完整。fwiw这个答案中的regexp_filter
表达式对我不起作用,我不得不使用:regexp_filter=\x{0065}\x{0301}=>e
。我想这是因为我使用的是谷歌re2的更新版本?
regexp_filter = \%u0065\%u0301 => e