【发布时间】: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