首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何找到不同权重的匹配关键字?

如何找到不同权重的匹配关键字?
EN

Stack Overflow用户
提问于 2017-02-10 22:19:53
回答 1查看 196关注 0票数 1

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

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

我的表: ID,field,value。

字段可以是"productName“或"productdescription”,value为文本。

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

我现在只使用LIKE语法:

代码语言:javascript
复制
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可以在那里使用,但是如何向关键字添加权重呢?

EN

回答 1

Stack Overflow用户

发布于 2017-02-10 22:45:30

这个问题的最好答案是不要把字符串当作关键字的列表!SQL为列表提供了非常棒的数据结构。它被称为表,而不是列。

有时候,我们会受困于别人糟糕的设计决策。我认为最好的方法是一个带有关键字和权重的“派生表”,然后逻辑如下:

代码语言:javascript
复制
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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42161618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档