mysql - 根据字段的组合权重对结果进行排序

标签 mysql sql full-text-search

我有一个非常有趣的问题要问你们所有的 SQL 大师。

众所周知,任何基于电子商务的购物车的主要要求之一是良好的搜索。

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

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

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

productid
name
description
price

“名称”和“描述”字段是全文索引的。

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

Incase,如果你没有很好地理解我的问题,那么下面的例子应该有所帮助。

 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,在名称中发现 nice 为 0(无),在描述中为 1(一次)。所以组合权重是 (0*10 + 1*1 = 0 + 1 = 1)

2 个问题

(1) 如何为特定领域提供权重?是否需要重新创建全文索引来提供权重?

(2) 我需要query,可以在desc中输出结果。组合权重的顺序。

最佳答案

全文搜索可以给你搜索的相对相关性:

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,我使相关性得分偏向名称的相关性得分

关于mysql - 根据字段的组合权重对结果进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6977584/

相关文章:

MySql - 'on clause' 中的未知列

mysql - CakePHP 查找分组依据不在生成的查询中

mysql - SQL中的Replace Statement如何设置到查询字符串中?

PHP 基于任意搜索查询在电子邮件数据库中搜索电子邮件地址和正文内容

javascript - 根据复选框的值选中和取消选中

sql - 需要帮助为一行中两个日期之间的每个月创建多行

sql - T SQL 每天只选择第一条记录

c# - SqlCommand 如果存在 - 更新,如果不存在 - 插入

asp.net - 为 ASP.NET MVC 应用程序实现全文搜索的最佳方法是什么?

基于 php 的 MySQL 数据的全文搜索?