2009-09-06 53 views
1

我試圖讓全文搜索按照 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; 

所以我需要那場比賽......對條款的選擇...我認爲。在完成這個

我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'); 

這是行不通的。任何指針?

在此先感謝!

回答

3

根據MySQL的全文自然語言搜索文檔:

當MATCH()WHERE子句中使用,如在前面所示,所返回的行自動具有最高相關性排序第一的例子。相關性值是非負浮點數。零相關意味着沒有相似性。相關性的計算基於行中單詞的數量,該行中唯一字的數量,集合中單詞的總數以及包含特定單詞的文檔(行)的數量。

這不適合你嗎?

您可以在MySQL中查看更多關於自然全文搜索的內容here.

相關問題