Как использовать Doctrine_RawSql для полнотекстового поиска и сортировки по релевантности

Я пытаюсь получить полнотекстовый поиск, который будет отсортирован по релевантности в запросе 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'); 

Это не работает. Любые указатели?

Заранее спасибо!

Related of "Как использовать Doctrine_RawSql для полнотекстового поиска и сортировки по релевантности"

В соответствии с полнотекстовыми поисковыми документами по естественному языку MySQL:

Когда MATCH () используется в предложении WHERE, как в примере, показанном ранее, возвращаемые строки автоматически сортируются с наивысшей релевантностью . Значения релевантности – неотрицательные числа с плавающей запятой. Нулевая релевантность означает отсутствие сходства. Релевантность вычисляется на основе количества слов в строке, количества уникальных слов в этой строке, общего количества слов в коллекции и количества документов (строк), содержащих определенное слово.

Это не работает для вас?

Вы можете узнать больше о естественном полнотекстовом поиске в MySQL здесь.