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. Вот почему три слова имеют больше документов.

Другие вопросы по тегам