如何查找不同权重的项目匹配关键字?

时间:2017-02-10 14:19:53

标签: sql sql-like keyword

我正在尝试发出一个SQL请求,找到与请求匹配的最佳项目。

我的关键字具有不同的权重(非常重要的关键字,重要的关键字等)。我想按分数对结果顺序进行排序。

我的表:ID,字段,值。

字段可以是“productName”或“productdescription”,值是文本。

我不知道如何为每个关键字添加权重,以及计算每个项目的得分。

我现在只使用LIKE语法:

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 个答案:

答案 0 :(得分: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;