【问题标题】:Database search engine - Sort by relevance according to specific relevance rules数据库搜索引擎 - 根据特定的相关性规则按相关性排序
【发布时间】:2011-04-27 08:22:18
【问题描述】:

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

现在,要求规定可以在三个方面进行搜索:书名、作者姓名和书本。这本身很容易通过三个单独的查询来完成。然而,还有更多。要求规定搜索结果应大致按以下顺序返回:

  • 完整的标题匹配
  • 作者全名匹配
  • 部分标题匹配
  • 完整的作者姓氏匹配
  • 部分作者姓氏匹配
  • 部分作者全名匹配
  • 书籍文本匹配

此外,还有次要要求:

  • 出版商本身的书名的排序应高于相邻出版商的书名(同一数据库中有十几个出版商的书)
  • 找到完全匹配的书名后,应显示同一作者的其他书籍(同样,同一出版商的书名优先于其他出版商 - 一个作者可以与多个出版商一起出版)

很多这样的规则。

所以,假设您有一本书 Johnson,作者是 Pete Johnson(或其他)。然后,搜索查询“john”应返回以下(ish):

  • 约翰逊(书)(部分标题匹配)
  • Pete Johnson(部分姓氏匹配)

还有搜索查询“Johnson”:

  • Johnson(书)(全名匹配)
  • Johnson(书)(部分标题匹配)(省略,已在结果中)
  • Pete Johnson(作者)(完整的作者姓氏匹配)
  • Pete Johnson(作者)(部分作者姓氏匹配)(省略)
  • Pete Johnson(作者)(部分作者全名匹配)(省略)
  • Johnson(书)(书文本匹配)(省略)

...无论如何。这基本上是要求,我只是想把它打出来。现在,有几个问题:

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

我有点抓紧这里的想法和建议。

【问题讨论】:

    标签: sql sql-server full-text-search


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-09-22
      • 2011-01-26
      • 1970-01-01
      • 2016-08-02
      • 2011-11-11
      • 1970-01-01
      • 2012-10-30
      • 2010-09-25
      • 2012-11-09
      相关资源
      最近更新 更多