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の全文自然言語検索ドキュメントによると:

MATCH() が WHERE 句で使用されている場合、前に示した例のように、返される行は自動的に最も関連性の高い順に並べ替えられます。関連値は、非負の浮動小数点数です。関連性ゼロとは、類似性がないことを意味します。関連性は、行内の単語数、その行内の一意の単語数、コレクション内の単語の総数、および特定の単語を含むドキュメント (行) の数に基づいて計算されます。

これはうまくいきませんか?

MySQL での自然な全文検索の詳細については、こちらを参照してください。

于 2009-09-06T16:10:50.523 に答える