我正在尝试通过相关性对全文搜索进行排序 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');
这不起作用。有什么指针吗?
提前致谢!
答案 0 :(得分:3)
根据MySQL全文自然语言搜索文档:
在WHERE子句中使用MATCH()时,如前面所示的示例,返回的行自动按最高相关性排序。相关性值是非负浮点数。零相关意味着没有相似性。根据行中单词的数量,该行中唯一单词的数量,集合中单词的总数以及包含特定单词的文档(行)的数量来计算相关性。
这不适合你吗?
您可以在MySQL here.
中阅读有关自然全文搜索的更多信息