【问题标题】:Can Sphinx handle unicode normalization forms?Sphinx 可以处理 unicode 规范化形式吗?
【发布时间】:2015-11-20 19:48:36
【问题描述】:

我知道charset_table 设置允许U+00E9 -> e 将'é' 映射到'e'。但是,如果您使用 U+0065 U+0301 代替 U+00E9 (这是 'é' 的“分解”形式,只是 'e' 后跟一个重音符号),那么 Sphinx 会将 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 规范化这样的东西,但我在文档中看不到任何提及。

【问题讨论】:

    标签: sphinx unicode-normalization


    【解决方案1】:

    不确定如何“可扩展地”处理它(即所有表格),但个人可以通过regexp_filter 完成?

    http://sphinxsearch.com/docs/current/conf-regexp-filter.html

    regexp_filter = \%u0065\%u0301 => e
    

    虽然可能已经说过,但只需将 U+0301(和其他“combining”字符)添加到ignore_charshttp://sphinxsearch.com/docs/current/conf-ignore-chars.html

    他们消失了,只剩下'unaccented' char (e)

    【讨论】:

    • 因为我在做é -> e 然后我添加了ignore_chars 来处理组合字符。但是,我不确定哪个范围是处理所有情况的“完整”集。我也做了你提到的组合变音符号(ignore_chars = U+0300..U+036F),但不确定这是否完整。
    • fwiw 这个答案中的regexp_filter 表达式对我不起作用,我不得不使用这个:regexp_filter = \x{0065}\x{0301} => e。我认为这是因为我使用的是更高版本的 google re2? github.com/google/re2/wiki/Syntax
    猜你喜欢
    • 2011-07-20
    • 2013-05-04
    • 1970-01-01
    • 2018-01-27
    • 2011-12-08
    • 2012-06-29
    相关资源
    最近更新 更多