Проблема: Если вы используете 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 | » |
