Можно попробовать такую конструкцию (это sphinxql):
WHERE MATCH('"word1 | word2 | word3 | word4"/2')
что означает найти все документы, содержащие как минимум 2 из слов "word1 | word2 | word3 | word4"
Соответственно для "купить газовые горелки от дяди Вовы" алгоритм будет такой:
- ищем полный текст
- если ничего не найдено, то разбиваем запрос на слова "купить | газовые | горелки | от | дяди | Вовы"
- на всякий случай лучше убрать дубли слов
- берём количество слов и отнимаем 1
- отправляем в sphinx запрос с WHERE MATCH('"купить | газовые | горелки | от | дяди | Вовы"/5'), где 5, число, полученное на предыдущем шаге
- если ничего не найдено, то возвращаемся на шаг 4
PS подозреваю, что это не самое правильное решение, но на 20% лучше, чем ничего.