Yii2 → Украинские буквы в Sphinx

Проблема: Если вы используете 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 »
  • спб. а то проблема «украинского» поиска не так уж редкА

  • Ivan Babiychuk

    Работает. Спасибо автору.