如何在此示例中过滤搜索结果

时间:2009-07-29 12:04:54

标签: sql postgresql full-text-search filtering ranking

我有一个包含数千种产品的产品表。有些产品有不同的颜色可供选择。但是,当有人搜索“mp3播放器”时,我不想向他展示每种颜色,而只是展示最畅销颜色的播放器。

她是桌面布局(简化):

ID | PRODUCT_NAME      | COLOR | SALE_COUNT
===========================================
 1 | Mp3 player red    | red   | 2
 2 | Mp3 player gold   | gold  | 1
 3 | Mp3 player black  | black | 100

但是,当用户搜索“Mp3播放器红色”时,我想向他显示红色播放器,而不是黑色播放器。搜索是使用'喜欢'运算符执行的(是的,我知道lucene,无论如何我需要解决这个问题)。

有任何建议如何解决这个问题?我有一些想法,但似乎没有一个好的解决方案。 感谢,

postgreSQL db和jave用于创建结果。

3 个答案:

答案 0 :(得分:2)

根据SALE_COUNT降序排序,只选择第一个,如果我理解你的问题:

SELECT TOP 1 ID, PRODUCT_NAME, COLOR, SALE_COUNT
FROM table
WHERE PRODUCT_NAME LIKE '%' + @searchParam + '%'
ORDER BY SALE_COUNT DESC

确保首先通过删除任何可能的sql注入攻击来清理搜索参数。

编辑:

如果您使用的是postgres,则语法是在末尾加上“LIMIT n”,所以:

SELECT ID, PRODUCT_NAME, COLOR, SALE_COUNT
FROM table
WHERE PRODUCT_NAME LIKE '%' + @searchParam + '%'
ORDER BY SALE_COUNT DESC
LIMIT 1

答案 1 :(得分:0)

它会像

SELECT TOP 1 (*) FROM table
WHERE PRODUCT_NAME LIKE 'mp3 player %' 
ORDER BY SALE_COUNT DESC

所以,我们只选择排序最高的行,按SALE_COUNT降序排列(以便最高销售额在最高位置)

答案 2 :(得分:0)

SELECT  *
FROM    products
WHERE   product_name LIKE 'mp3 player%'
ORDER BY
        sale_count DESC
LIMIT 1