@Selenarctos

Как искать точное совпадение в sphinx?

Пытаюсь настроить sphinx на проекте. Запрос выглядит следующим образом
("SELECT id FROM request_text WHERE MATCH('" . \Yii::$app->sphinx->escapeMatchValue($filter->words_search) . "'), в words_search приходят ключевые слова из фильтра, но почему-то на запрос "диван" (в кавычках, насколько я понял ищется точное совпадение) выдает результат со словом "диваны". Как настроить сфинкс таким образом, чтобы он в кавычках искал только точное совпадение, может я что-то в конфиге напутал?

Вот конфиг
source request
{
type = mysql
sql_host =хост
sql_user = юзер
sql_pass = пароль
sql_db = база
sql_port = 9306
mysql_connect_flags = 32
sql_query_pre = SET NAMES utf8
sql_query = SELECT id, title, description, words_doc FROM request
sql_attr_uint = id
sql_field_string = title
sql_field_string = description
sql_field_string = words_doc
}

index request_text
{
source = request
ondisk_attrs = 1
min_word_len = 3
min_infix_len = 3
morphology = stem_en, stem_ru
expand_keywords = 1
index_exact_words = 1
path = /var/lib/sphinx/data/request_text
docinfo = extern
html_strip = 1
}

indexer
{
mem_limit = 240M
}

searchd
{
log = /var/log/sphinx/searchd.log
query_log = /var/log/sphinx/query.log
pid_file = /var/run/sphinx/searchd.pid
unlink_old = 1
listen = 9312
listen = 9306:mysql41
}
  • Вопрос задан
  • 747 просмотров
Решения вопроса 2
tumbler
@tumbler
бекенд-разработчик на python
=диван
В кавычках ищется фраза.
Ответ написан
@neol
Попробуйте в запросе перед словом поставить равно. Т. е. вместо "диван" отправлять "=диван".

Но если вам всегда нужно искать по точному совпадению, то может быть лучше закомментировать эти два параметра:
morphology = stem_en, stem_ru
expand_keywords = 1
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы