Я знаю настройку charset_table
, чтобы разрешить U+00E9 -> e
, который отобразит 'é' в 'e'. Однако если вместо U + 00E9 у вас есть U + 0065 U + 0301 (который является «разложенной» формой «é», которая является просто «e», за которой следует острый акцент), то Sphinx будет рассматривать U + 0301 как пробел и сломайте слово.Может ли Sphinx обрабатывать формы нормализации Unicode?
пример:
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 здесь нужно, но я не вижу ни одного упоминания о том, что в документации.
Поскольку я делаю 'E -> é' затем я добавил' ignore_chars' для обработки сочетающих символов. Однако я не уверен, какой диапазон является «полным» набором для обработки всех случаев. Я также делал комбинированные диакритические знаки ('ignore_chars = U + 0300..U + 036F'), как вы упомянули, но не уверен, что все сделано. –
fwiw выражение 'regexp_filter' в этом ответе не работало для меня, я должен был использовать это:' regexp_filter = \ x {0065} \ x {0301} => e'. Я думаю, это потому, что я использовал более позднюю версию google re2? https://github.com/google/re2/wiki/Syntax – joshweir