目前,我有一个存储过程,其主要目标是通过电影和电视节目的数据库表进行全文搜索。为了让它做部分关键字搜索,我在SQL中添加了一些代码,用空格分割搜索查询,并输出如下语句:部分关键字搜索(MS SQL 2005)
'“batman *”〜“be *”'
例如,可以从用户输入的页面上的文本框生成原始字符串“batman be”,并且在每个javascript keyup事件中,我将该文本框中的任何内容发送到存储的proc以获得结果在我输入时获得结果(如自动完成)。在这种情况下,用户可能一直在寻找“蝙蝠侠开始”或“蝙蝠侠:蝙蝠女郎开始”(电视剧集),并且他们都应该出现。
下面是我的查询示例。 @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
我在查询中遇到的问题是,排名似乎并不完全符合我的预期。如果我只是想搜索“蝙蝠侠”,人们会相信所有以“蝙蝠侠”开头或仅包含“蝙蝠侠”这个单词的电影将首先出现。但他们没有。 当一个搜索只是“蝙蝠侠”会发生什么样的结果是如下:
“蝙蝠侠:动画系列 - 集114” “蝙蝠侠和罗宾的冒险 - 集218” “蝙蝠侠与罗宾 - 集101" ‘蝙蝠侠 - 集101’ ‘蝙蝠侠与罗宾 - 集204’
大部分进一步下跌的名单是电影,我正在寻找 - ‘蝙蝠侠:开战时刻’,甚至只是‘蝙蝠侠’。
我正在寻找关于如何调整此查询的建议 - 我绝对不是SQL专家,我觉得我只是人为地处理了上面的代码以使其工作。我有一种感觉,有一个更优雅或强大的解决方案,我还没有找到它。
预先感谢您
您可能对SQL 2008有所了解,因为我还没有使用它,但到目前为止,Lucene已经给我提供了更好的结果和灵活性,而且时间更少。 – Carl 2008-12-03 14:51:13