部分关键字搜索(MS SQL 2005)

部分关键字搜索(MS SQL 2005),sql,sql-server,full-text-search,Sql,Sql Server,Full Text Search,目前,我有一个存储过程,其主要目标是通过电影和电视节目的数据库表进行全文搜索。为了让它进行部分关键字搜索,我在SQL中添加了一些代码,以按空格分割搜索查询,并输出如下语句: “蝙蝠侠*”~“be*” 例如,原始字符串“蝙蝠侠be”可以在用户键入时从页面上的文本框中生成,在每个javascript键控事件中,我将文本框中的任何内容发送到存储的proc,以获得键入时的结果(如autocomplete)。在这种情况下,用户可能一直在寻找“蝙蝠侠开始”或“蝙蝠侠:蝙蝠侠女孩开始”(一个电视节目集),因此

目前,我有一个存储过程,其主要目标是通过电影和电视节目的数据库表进行全文搜索。为了让它进行部分关键字搜索,我在SQL中添加了一些代码,以按空格分割搜索查询,并输出如下语句:

“蝙蝠侠*”~“be*”

例如,原始字符串“蝙蝠侠be”可以在用户键入时从页面上的文本框中生成,在每个javascript键控事件中,我将文本框中的任何内容发送到存储的proc,以获得键入时的结果(如autocomplete)。在这种情况下,用户可能一直在寻找“蝙蝠侠开始”或“蝙蝠侠:蝙蝠侠女孩开始”(一个电视节目集),因此他们都应该出现

下面是我的查询示例@在上面的示例中,partialKeywordString是
“蝙蝠侠*”~“be*”

我在查询中遇到的问题是,排名似乎与我期望的并不完全一致。如果我只是搜索“蝙蝠侠”,人们会相信所有以“蝙蝠侠”开头或仅包含“蝙蝠侠”一词的电影标题都会首先出现。但事实并非如此。
下面是搜索“蝙蝠侠”的示例结果:

“蝙蝠侠:动画片系列-第114集”
“蝙蝠侠和罗宾历险记-第218集”
“蝙蝠侠与罗宾-第101集”
“蝙蝠侠-第101集”
“蝙蝠侠与罗宾-第204集”

更靠后的是我一直在寻找的电影——《蝙蝠侠开始》,甚至只是《蝙蝠侠》

我正在寻找关于如何调整这个查询的建议——我绝对不是SQL专家,我觉得我只是人工处理了上面的代码来让它工作。我觉得有一个更优雅或更强大的解决方案,但我还没有找到


提前感谢您

在进一步研究之后,我将尝试使用Lucene.Net作为我的电影标题搜索引擎,而不是依赖SQL Server 2005中的全文搜索。早期测试表明,结果更好,与Lucene更相关。搜索“蝙蝠侠”将返回以下部分结果集:

  • 蝙蝠侠
  • 蝙蝠侠开始
  • 蝙蝠侠归来
  • 蝙蝠侠和罗宾:蝙蝠侠接管
  • 《蝙蝠侠超越:库拉雷之触》
  • 蝙蝠侠:巴贝尔
  • 蝙蝠侠:第二季
  • 蝙蝠侠:乱七八糟
  • 蝙蝠侠与罗宾:恐怖隧道
  • 蝙蝠侠超越[动画电视连续剧]
  • 蝙蝠侠新冒险:诅咒!又上油了
  • 蝙蝠侠新冒险:这看起来像是蝙蝠螨的工作
在进一步研究之后,我将尝试使用Lucene.Net作为我的电影标题搜索引擎,而不是依赖SQL Server 2005中的全文搜索。早期测试表明,结果更好,与Lucene更相关。搜索“蝙蝠侠”将返回以下部分结果集:

  • 蝙蝠侠
  • 蝙蝠侠开始
  • 蝙蝠侠归来
  • 蝙蝠侠和罗宾:蝙蝠侠接管
  • 《蝙蝠侠超越:库拉雷之触》
  • 蝙蝠侠:巴贝尔
  • 蝙蝠侠:第二季
  • 蝙蝠侠:乱七八糟
  • 蝙蝠侠与罗宾:恐怖隧道
  • 蝙蝠侠超越[动画电视连续剧]
  • 蝙蝠侠新冒险:诅咒!又上油了
  • 蝙蝠侠新冒险:这看起来像是蝙蝠螨的工作
我想您会发现SQL Server全文版同样有效,但您必须了解如何构建关键字。它与Lucene不同,尤其是在索引方面。我想您会发现SQL Server在可扩展性和功能方面会更好,特别是SQL 2008现在它是引擎的一部分。

我想您会发现SQL Server全文版也同样有效,但您必须了解如何构建关键字。它与Lucene不同,尤其是在索引方面。我想您会发现SQL Server在可扩展性和功能方面会更好,尤其是SQL 2008,现在它已成为引擎的一部分。

您可能对SQL 2008的看法是正确的,因为我没有使用它,但到目前为止,Lucene在更短的时间内为我提供了更好的结果和灵活性。您可能对SQL 2008的看法是正确的,因为我没有使用它,但是,到目前为止,Lucene用更少的时间给了我更好的结果和灵活性。
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