2010-10-19 70 views
1

我刚刚获得了我们网站新搜索功能的要求列表。他们是图书出版商的网站,所以这是我们在这里经营的基本领域。数据存储在启用全文本的Microsoft SQL 2005数据库服务器(SP3)中。数据库搜索引擎 - 根据特定相关性规则按相关性排序

现在,要求规定搜索可以在三个方面完成:书名,作者姓名和书籍文本。这本身很容易处理三个不同的查询。但是,还有更多。该要求规定,搜索结果应该返回大致顺序如下:

  • 完全符合标题
  • 全部作者姓名相匹配
  • 偏题匹配
  • 所有作者姓氏匹配
  • 部分作者姓氏比赛
  • 部分作者全名匹配
  • 书本文本匹配

此外,还有次级需求:从发布者本身

  • 标题应当责令比相邻出版商的高(有在同一个数据库从十几本书左右的出版商)
  • 当找到同名作者的完整匹配,应显示同一作者的其他书籍(同一出版商的标题优先于另一个出版者 - 作者可以与多个出版商一起发布)

很多像这样的规则。

所以,假设你有一本书约翰逊,由作家皮特约翰逊(或任何)写的。然后,搜索查询 '约翰' 应该返回以下(ISH):

  • 约翰逊(书)(部分锦标赛)
  • 皮特·约翰逊(部分姓氏匹配)

与搜索查询“约翰逊:

  • 约翰逊(书)(全名赛)
  • 约翰逊(书)(部分锦标赛)(略,已经在结果)
  • 皮特·约翰逊(作者)(全作者姓氏匹配)
  • 皮特·约翰逊(作者)(部分作者姓氏匹配)(略)
  • 皮特·约翰逊(作者)(部分作者全名匹配)(略)
  • 约翰逊(书)(书本文字匹配)(略)

...反正。这基本上是要求,我只是想输入。现在,对于几个问题:

  • 有没有关于这个特定主题的任何书籍或文章,你可以指向我?
  • 这将如何实现?这可以在一组基本查询中完成(针对每个搜索需求的单独查询,后期处理以删除重复项并合并结果),还是可以在单个查询中完成?
  • 或者我是否需要编写一个应用程序索引表并创建自己的索引等,然后依次搜索查询?

我在这里有点想法和建议。

回答

1

CONTAINSTABLEFREETEXTTABLE函数 - 它们返回的RANK列是“相关性排名”。可能这些功能加上一些非文本列的复杂排序将完成这项工作。

如果您决定在您的应用中实施FTS,请查看第三方解决方案。 Lucene(或Lucene.NET)可能是很好的开始。