【发布时间】:2011-02-23 21:04:10
【问题描述】:
在我的数据库中,我有一个 keywords 字段,用于存储以逗号分隔的关键字列表。
例如,史莱克娃娃可能有以下关键字:
ogre, green, plush, hero, boys' toys
一个“豆豆宝宝”娃娃(恰好是一个食人魔)可能有:
beanie baby, kids toys, beanbag toys, soft, infant, ogre
(这是一个完全人为的例子。)
我想做的是,如果消费者搜索“食人魔”,我希望“史莱克”娃娃在搜索结果中的排名更高。
我的内容管理员认为,如果关键字在列表中较早,它应该获得更高的排名。 (这对我来说很有意义,而且我很容易让他们控制搜索结果的相关性)。
这是一个简化的查询:
SELECT
p.ProductID AS ContentID
, p.ProductName AS Title
, p.ProductCode AS Subtitle
, 100 AS Rank
, p.ProductKeywords AS Keywords
FROM Products AS p
WHERE FREETEXT( p.ProductKeywords, @SearchPredicate )
我正在考虑将 RANK 替换为:
, 200 - INDEXOF(@SearchTerm) AS Rank
这个“应该”按关键字结果的相关性对关键字结果进行排名
我知道 INDEXOF 不是 SQL 命令...但它是我想要完成的事情。
我的方法正确吗?
有可能做这样的事情吗?
这有意义吗?
【问题讨论】:
-
@serg555 目前是 SQL Server 2005。
-
是否支持
CHARINDEX或PATINDEX?这些可以用来代替“INDEXOF”。 -
它似乎支持它......但我在实现它时运气不佳。
标签: sql search full-text-search keyword