@BoDRbI
VoIP Developer

Sphinx как решить проблему с поиском?

Всем привет! столкнулся с такой проблемой.
Есть таблица id, phrase, intense_key
Пробую искать города, пример:
SELECT *  FROM recognit WHERE MATCH('екатеринбург');
+------+--------------------------+--------------------------+
| id   | phrase                   | intense_key              |
+------+--------------------------+--------------------------+
|   48 | екатеринбург             | екатеринбург             |
+------+--------------------------+--------------------------+
1 row in set (0.00 sec)


Если в поисковый запрос передать доп. слово, например добавить город:
SELECT *  FROM recognit WHERE MATCH('город екатеринбург');
Empty set (0.00 sec)


то ничего не находится. Собственно как это поправить? mysql fulltext корретно такой сценарий обрабатывает.

source ivr
{
    type            = mysql
    sql_host        = localhost
    sql_user        = root
    sql_pass        = pass
    sql_db          = base
    sql_port        = 3306  # optional, default is 3306
    sql_query_pre = SET NAMES utf8
    sql_query_pre = SET CHARACTER SET utf8
    sql_query       =  SELECT id, phrase, intense_key FROM phrases WHERE is_active='yes'
    sql_field_string = phrase
    sql_field_string = intense_key
}
index recognit
{
    source          = ivr
    path            = /var/data/sphinx/recognit
    min_word_len    = 1
    morphology      = stem_ru
    expand_keywords = 1
    min_stemming_len = 1
    min_word_len = 3
    html_strip = 1
    preopen = 1
    min_infix_len = 1
    index_exact_words = 1
}


и на всякий случай show meta;
mysql> show meta;
+---------------+----------------------------+
| Variable_name | Value                      |
+---------------+----------------------------+
| total         | 0                          |
| total_found   | 0                          |
| time          | 0.001                      |
| keyword[0]    | *город*                    |
| docs[0]       | 0                          |
| hits[0]       | 0                          |
| keyword[1]    | *екатеринбург*             |
| docs[1]       | 1                          |
| hits[1]       | 2                          |
| keyword[2]    | =город                     |
| docs[2]       | 0                          |
| hits[2]       | 0                          |
| keyword[3]    | город                      |
| docs[3]       | 0                          |
| hits[3]       | 0                          |
| keyword[4]    | =екатеринбург              |
| docs[4]       | 1                          |
| hits[4]       | 2                          |
| keyword[5]    | екатеринбург               |
| docs[5]       | 1                          |
| hits[5]       | 2                          |
+---------------+----------------------------+
21 rows in set (0.01 sec)
  • Вопрос задан
  • 102 просмотра
Решения вопроса 1
tumbler
@tumbler
бекенд-разработчик на python
SELECT *  FROM recognit WHERE MATCH('город | екатеринбург');

Сходу в документации не найду, но по-моему слова через пробел ищутся по принципу "И".
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы