2017-02-10 4 views
1

私は、要求に一致する最良のアイテムを見つけるSQLリクエストを作成しようとしています。SQL重さの異なる商品検索キーワードの検索方法は?

私は、さまざまな重み(非常に重要なキーワード、重要なキーワードなど)を持つキーワードを持っており、結果の順位をスコアで並べ替える必要があります。

マイテーブル:ID、フィールド、値。

フィールドは "productName"または "productdescription"とすることができ、valueはテキストです。

各キーワードに重みを追加する方法と、各アイテムのスコアを計算する方法はわかりません。

私はちょうど今LIKE syntaxeのために使用しています:

SELECT id FROM products 
WHERE (field='productname' 
    AND value LIKE '%KEYWORD1%' 
    AND value LIKE ‘%KEYWORD2% …) 
OR (field='productdescription' 
AND value LIKE '%KEYWORD1%' AND value LIKE '%KEYWORD2%'..) 

は、私は、構文MATCH-AGAINSTが使用することができることを知っているが、どのようなキーワードに重みを追加しますか?多くの事前

答えて

1

おかげでこの質問に対する最良の答えは、キーワードのリストとして文字列を処理することはありません! SQLは、リストのためのこの本当に素晴らしいデータ構造を持っています。 の列ではなく、表と呼ばれます。

時々、私たちは他の人の本当に悪い設計決定に悩まされています。私は最良の方法は、キーワードと重みを持つ「派生テーブル」で、次にこのようなロジックだと思う:

SELECT p.id 
FROM products p JOIN 
    (SELECT 'KEYWORD1' as kw, 1 as weight UNION ALL 
     SELECT 'KEYWORD2' as kw, 10 as weight UNION ALL 
     SELECT 'KEYWORD3' as kw, 10 as weight 
    ) kw  
    ON (p.field IN ('productname', 'productdescription') AND 
     p.value LIKE CONCAT('%', kw.kw, '%') 
     ) 
GROUP BY p.id 
ORDER BY SUM(weight) DESC; 
関連する問題