Mysql 基于字段组合权重的排序结果

Mysql 基于字段组合权重的排序结果,mysql,sql,full-text-search,Mysql,Sql,Full Text Search,我有一个非常有趣的问题要问大家 大家都知道,任何基于电子商务的购物车的首要要求之一就是良好的搜索 几天前,我开始了解MySQL全文搜索,我必须说它非常有趣 我想在搜索查询中领先一步,并需要为字段提供权重。这些权重将允许对搜索结果进行排序 例如:我在product表中有以下字段 productid name description price “名称”和“描述”字段是全文索引的 对于任何搜索关键字,查询都应该查看两个字段:名称、描述。但名称字段应该比描述字段有更多的权重 如果您还没有很好地理解我

我有一个非常有趣的问题要问大家

大家都知道,任何基于电子商务的购物车的首要要求之一就是良好的搜索

几天前,我开始了解MySQL全文搜索,我必须说它非常有趣

我想在搜索查询中领先一步,并需要为字段提供权重。这些权重将允许对搜索结果进行排序

例如:我在product表中有以下字段

productid
name
description
price
“名称”和“描述”字段是全文索引的

对于任何搜索关键字,查询都应该查看两个字段:名称、描述。但名称字段应该比描述字段有更多的权重

如果您还没有很好地理解我的问题,那么下面的示例应该会有所帮助

 productid             name                   description                price
 1                  nice keyboard      this is a nice nice keyboard     10                
 2                  nice nice keyboard this is a nice nice keyboard     10                
 3                  keyboard           this is a nice keyboard     10                
当搜索关键字为“nice”时,“name”字段的权重为10,“description”字段的权重为1

对于productid:1,nice的名称为1(一次),描述为2(两次)。所以联合收割机的重量是(1*10+2*1=10+2=12)

对于productid:2,nice的名称为2(两次),描述为2(两次)。所以联合收割机的重量是(2*10+2*1=20+2=22)

对于productid:3,在名称中找到0(无),在描述中找到1(一次)。所以联合收割机的重量是(0*10+1*1=0+1=1)

2个问题

(1) 如何为特定字段提供权重?我是否需要再次创建全文索引以提供权重


(2) 我需要查询,它可以按照合并权重的描述顺序输出结果。

全文搜索可以为您提供搜索的相对相关性:

SELECT * FROM
(
    SELECT id,
    (MATCH(name) AGAINST ('nice')*10 ) + MATCH(description) AGAINST('nice') AS relevance
    FROM products
    WHERE MATCH(name) AGAINST ('nice') OR
    MATCH(description) AGAINST ('nice')
) ORDER BY revelence DESC

通过将名称相关性乘以10,我将相关性得分向名称的相关性得分倾斜

全文搜索可以为您提供搜索的相对相关性:

SELECT * FROM
(
    SELECT id,
    (MATCH(name) AGAINST ('nice')*10 ) + MATCH(description) AGAINST('nice') AS relevance
    FROM products
    WHERE MATCH(name) AGAINST ('nice') OR
    MATCH(description) AGAINST ('nice')
) ORDER BY revelence DESC
通过将名称相关性乘以10,我将相关性得分向名称的相关性得分倾斜