2011-09-16 28 views
7

私はmysqlデータベースの全文検索の検索結果をランク付けして小さな問題を抱えています。私が試した2つの方法でそれを書く:全文検索ランキング

NATURAL WAY:

SELECT SQL_CALC_FOUND_ROWS *, 
MATCH(productname,keywords) AGAINST('$cl_search') AS score 
FROM products 
WHERE MATCH(productname,keywords) AGAINST('$cl_search') 
ORDER BY score DESC,lastupdated DESC; 

BOOLEAN WAY:

SELECT SQL_CALC_FOUND_ROWS *, 
((MATCH(productname) AGAINST('$cl_search' IN BOOLEAN MODE))+ 
(MATCH(keywords) AGAINST('\"$cl_search\"' IN BOOLEAN MODE))) AS score 
FROM products 
WHERE MATCH(productname,keywords) AGAINST('$cl_search') 
ORDER BY score DESC,lastupdated DESC; 
私は自然言語モードで検索したときに、私は私が得るインデックスが好き

が、どのように私は良い検索結果を得るために、商品名として「バッグバッグバッグバッグバッグ」と入力しないようにしますか?

私はそれを修正するためにブール値の方法を書いたが、1.それはより遅く、2.私は '単語数と比較した'のような他の関連性指標を取得しない。

どのようにして両方の世界をベストにするかについてのご意見はありますか?

答えて

-3

Luceneを使用するのはずっと簡単ですが、はるかに進歩しており、あなたが望むものを処理するオプションがあります。

1

重複するキーワードを削除するユーザー定義関数の作成についてはどうですか? クエリは次のようになります。

SELECT SQL_CALC_FOUND_ROWS *, 
MATCH(productname,RM_DUP(keywords)) AGAINST('$cl_search') AS score 
FROM products 
    WHERE MATCH(productname,RM_DUP(keywords)) AGAINST('$cl_search') 
    ORDER BY score DESC,lastupdated DESC;