SphinxQL - идеальный режим поиска от 1 до 4 слов
Я работаю над проектом с Sphinx Search Engine, используя SphinxQL. Моя проблема заключается в следующем:
Это мой запрос sphinxql:
"SELECT *, country FROM all_gebrauchte_products WHERE MATCH('@searchtext (".$searchQuery.")') AND country='".$where."' ORDER BY WEIGHT() DESC LIMIT ".$page.", ".$limit." OPTION ranker=expr('sum(lcs)')"
Результат отличается очень сильно, как:
Honda => 50 results
Honda CBR => 9 results
Honda CBR 1000 => 2 results
Это мой запрос MySQL:
SELECT COUNT(*) FROM all_gebrauchte_products WHERE MATCH(gebr_id, gebr_hersteller, gebr_modell, gebr_ukat, gebr_kat, gebr_bemerkung) AGAINST ('".$searchQuery."' IN BOOLEAN MODE);
Результаты:
Honda => 67 results
Honda CBR => 67 results
Honda CBR 1000 => 84 results
Запрос MySQL работает в логическом режиме - поэтому запрос для Honda CBR 1000 также находит Honda VTR 1000, как мне кажется...
Итак, какой режим поиска лучше всего подходит для второго набора результатов? Кто-нибудь может мне объяснить, что было бы идеальным режимом и как (пример) правильно написать запрос sphinxql?
Thnx. заблаговременно...
1 ответ
Основное различие заключается в том, что неявный оператор MySQLs в булевых режимах - это OR. Для многословного запроса требуется только одно из слов (кроме префикса с +)
Но в режиме расширенного соответствия Sphinxes (который использует sphinxQL) неявный оператор - AND. Так что требует ВСЕ слова.
Может использовать оператор кворума, чтобы получить поведение "ИЛИ" по умолчанию
... MATCH('@searchtext (\"".$searchQuery."\"/1)') ...
т.е. требуется только одно из слов.
-
Запрос MySQL работает в логическом режиме - поэтому запрос для Honda CBR 1000 также находит Honda VTR 1000, как мне кажется...
Ну да. Но поскольку требуется всего одно слово, нужно также найти все документы с надписью "1000", даже если не Honda. Вот почему три слова имеют больше документов.