【问题标题】:How to find item matching keywords with different weights?如何找到不同权重的项目匹配关键字?
【发布时间】:2017-02-10 14:19:53
【问题描述】:

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

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

我的表:ID、字段、值。

字段可以是“产品名称”或“产品描述”,值是文本。

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

我现在只是使用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 语法可以用在那里,但是如何为关键字添加权重?

【问题讨论】:

    标签: sql sql-like keyword


    【解决方案1】:

    这个问题的最佳答案是不要将字符串视为关键字列表! SQL 有这种非常棒的列表数据结构。它被称为 table,而不是 column

    有时,我们会被其他人非常糟糕的设计决策所困扰。我认为最好的方法是带有关键字和权重的“派生表”,然后是这样的逻辑:

    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-30
      • 2021-10-23
      • 1970-01-01
      • 2017-09-06
      • 1970-01-01
      • 2020-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多