1

我试图让全文搜索按 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');

那是行不通的。任何指针?

提前致谢!

4

1 回答 1

3

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

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

这对你不起作用吗?

您可以在此处阅读有关 MySQL 中自然全文搜索的更多信息

于 2009-09-06T16:10:50.523 回答