如何使用Doctrine_RawSql进行全文搜索并按相关性排序

时间:2009-09-06 15:56:00

标签: php doctrine dql

我正在尝试通过相关性对全文搜索进行排序 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;

所以我需要得到那个匹配...对选择中的条款......我想。

我完成此事的crapshoot猜测是:

$q->select("{p.id}, match({p.content}) against ('$escaped_user_query') as score")
  ->from('cms_page p')
  ->orderBy('score DESC')
  ->addComponent('p', 'CmsPage p');

这不起作用。有什么指针吗?

提前致谢!

1 个答案:

答案 0 :(得分:3)

根据MySQL全文自然语言搜索文档:

  

在WHERE子句中使用MATCH()时,如前面所示的示例,返回的行自动按最高相关性排序。相关性值是非负浮点数。零相关意味着没有相似性。根据行中单词的数量,该行中唯一单词的数量,集合中单词的总数以及包含特定单词的文档(行)的数量来计算相关性。

这不适合你吗?

您可以在MySQL here.

中阅读有关自然全文搜索的更多信息