Dimoncha
@Dimoncha

Почему Sphinx не ищет, если в в запросе есть слово, которого нет в индексе?

Пусть есть индекс, содержащий фразу "газовые горелки от дяди Вовы".
Если искать по фразе, которая содержит только слова из индекса, то сфинкс ищет.
Если добавить какое нибудь лишнее слово, например "купить газовые горелки от дяди Вовы", то сфинкс не выдает результатов.
Хотелось бы сделать так, что бы, если есть пару лишних слов в длинном запросе, то сфинкс бы мог игнорить неточное совпадение.
match mode any не подходит, т.к. он ищет каждое слово во всех данных. И чем больше слов, тем больше результатов.
  • Вопрос задан
  • 374 просмотра
Пригласить эксперта
Ответы на вопрос 2
@neol
Можно попробовать такую конструкцию (это sphinxql):
WHERE MATCH('"word1 | word2 | word3 | word4"/2')
что означает найти все документы, содержащие как минимум 2 из слов "word1 | word2 | word3 | word4"
Соответственно для "купить газовые горелки от дяди Вовы" алгоритм будет такой:
  1. ищем полный текст
  2. если ничего не найдено, то разбиваем запрос на слова "купить | газовые | горелки | от | дяди | Вовы"
  3. на всякий случай лучше убрать дубли слов
  4. берём количество слов и отнимаем 1
  5. отправляем в sphinx запрос с WHERE MATCH('"купить | газовые | горелки | от | дяди | Вовы"/5'), где 5, число, полученное на предыдущем шаге
  6. если ничего не найдено, то возвращаемся на шаг 4


PS подозреваю, что это не самое правильное решение, но на 20% лучше, чем ничего.
Ответ написан
Комментировать
opium
@opium
Просто люблю качественно работать
Поменяйте mode поиска на другой
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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