Проблема: Если вы используете Sphinx для для поиска на украинском или русском языке, то у вас могут возникнуть трудности с поиском слов содержащих буквы ї
, і
, є
, ґ
, ё
и т.д. В результатах поиска слово «місто», к примеру, будет разбито на «м» и «сто».
Решение: Для полноценного поиска на украинском языке необходимо настроить таблицу символов charset_table
в конфиге sphinx ( /etc/sphinxsearch/sphinx.conf
) следующим образом:
index indexName { # Ukrainian chars charset_table = 0..9, _, A..Z->a..z, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F, U+404->U+454, U+454, U+406->U+456, U+456, U+407->U+457, U+457, U+490->U+491, U+491, U+401->U+435, U+451->U+435, U+002D ignore_chars = U+0021..U+002C, U+002E, U+002F, U+003A..U+0040, U+0060, U+2019, U+00AB, U+00BB morphology = stem_enru }
Правило необходимо добавить в секцию index.
После внесения изменений перезапускаем сервис и делаем --rotate
индекса:
service sphinxsearch restart indexer --rotate --all
Таблица описывающая применяемые правила для украинских и русских букв, а также их номера в Юникоде.
0..9, _ | 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, _ |
A..Z->a..z, a..z
|
A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z
-> a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z |
U+410..U+42F->U+430..U+44F,
U+430..U+44F, |
А, Б, В, Г, Д, Е, Ж, З, И, Й, К, Л, М, Н, О, П, Р, С, Т, У, Ф, Х, Ц, Ч, Ш, Щ, Ъ, Ы, Ь, Э, Ю, Я
-> а, б, в, г, д, е, ж, з, и, й, к, л, м, н, о, п, р, с, т, у, ф, х, ц, ч, ш, щ, ъ, ы, ь, э, ю, я |
U+404->U+454, U+454, | Є = є |
U+406->U+456, U+456, | І = і |
U+407->U+457, U+457, | Ї = ї |
U+490->U+491, U+491, | Ґ = ґ |
U+401->U+435, | Ё = е |
U+451->U+435, | ё = е |
U+002D, | — |
Таблица описывает символы которые будут проигнорированы ignore_chars
:
U+0021..U+002C | ! » # $ % & ‘ () * + , |
U+002E | . |
U+002F | / |
U+003A..U+0040 | : ; < = > ? @ |
U+0060 | ` |
U+2019 | ’ |
U+00AB | « |
U+00BB | » |