【问题标题】:How to use Doctrine_RawSql for a fulltext search and sorting by relevance如何使用 Doctrine_RawSql 进行全文搜索和按相关性排序
【发布时间】:2009-09-06 15:55:59
【问题描述】:

我正在尝试让全文搜索按相关性排序 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');

这行不通。有什么指点吗?

提前致谢!

【问题讨论】:

    标签: php doctrine dql


    【解决方案1】:

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

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

    这不适合你吗?

    您可以在 MySQL here. 中阅读更多关于自然全文搜索的信息

    【讨论】:

      猜你喜欢
      • 2011-08-26
      • 2010-11-04
      • 2012-11-09
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-28
      相关资源
      最近更新 更多