目前,我有一个存储过程,其主要目标是通过电影和电视节目的数据库表进行全文搜索。为了让它进行部分关键字搜索,我在 SQL 中添加了一些代码,以空格分隔搜索查询,并输出如下语句:
"batman*" ~ "be*"
例如,原始字符串“batman be”可以在用户键入时从页面上的文本框生成,并且在每个 javascript keyup 事件中,我将该文本框中的任何内容发送到存储的 proc 以获取结果以获得结果为我输入(如自动完成)。在这种情况下,用户可能一直在寻找“Batman Begins”或“The Batman: Batgirl Begins”(电视剧集),结果它们都应该出现。
以下是我的查询示例。@partialKeywordString 在上面的示例中是"batman*" ~ "be*"
.
SELECT f.title
FROM Films f INNER JOIN
CONTAINSTABLE(Films, Title, @partialKeywordString) f_key ON f.filmid = f_key.[key]
ORDER BY f_key.Rank DESC
我对查询的问题是排名似乎并不完全符合我的预期。如果我只搜索“蝙蝠侠”,人们会认为所有以“蝙蝠侠”开头或仅包含“蝙蝠侠”一词的电影标题都会首先出现。但他们没有。
以下是仅搜索“batman”时发生的情况的示例结果:
“蝙蝠侠:动画系列 - 第 114 集”
“蝙蝠侠和罗宾的冒险 - 第 218 集”
“蝙蝠侠和罗宾 - 第 101 集”
“蝙蝠侠 - 第 101 集”
“蝙蝠侠和罗宾 - 第 204 集”
更靠后的是我正在寻找的电影——“蝙蝠侠开始”,甚至只是“蝙蝠侠”。
我正在寻找有关如何调整此查询的建议——我绝对不是 SQL 专家,我觉得我只是手动处理了上面的代码以使其工作。我觉得有一个更优雅或更强大的解决方案,但我还没有找到它。
先感谢您