Я пытаюсь получить полнотекстовый поиск, который будет отсортирован по релевантности в запросе Doctrine_RawSql.
Этот код выполнит поиск:
$q = new Doctrine_RawSql(); $q->select('{p.*}') ->from('cms_page p') ->where('match(p.content) against (?)', $user_query) ->addComponent('p', 'CmsPage p');
Это будет выполнено. Я хотел бы, чтобы результаты были отсортированы по релевантности
Реальный sql должен был бы выглядеть примерно так:
select p.id, match(p.content) against (?) as score from cms_page as p order by score desc;
Поэтому мне нужно получить этот матч … против предложения в выборе … Я думаю.
Мое увлечение дерьмом для достижения этого было:
$q->select("{p.id}, match({p.content}) against ('$escaped_user_query') as score") ->from('cms_page p') ->orderBy('score DESC') ->addComponent('p', 'CmsPage p');
Это не работает. Любые указатели?
Заранее спасибо!
В соответствии с полнотекстовыми поисковыми документами по естественному языку MySQL:
Когда MATCH () используется в предложении WHERE, как в примере, показанном ранее, возвращаемые строки автоматически сортируются с наивысшей релевантностью . Значения релевантности – неотрицательные числа с плавающей запятой. Нулевая релевантность означает отсутствие сходства. Релевантность вычисляется на основе количества слов в строке, количества уникальных слов в этой строке, общего количества слов в коллекции и количества документов (строк), содержащих определенное слово.
Это не работает для вас?
Вы можете узнать больше о естественном полнотекстовом поиске в MySQL здесь.