2010-10-19 61 views
1

我剛剛獲得了我們網站新搜索功能的要求列表。他們是圖書出版商的網站,所以這是我們在這裏經營的基本領域。數據存儲在啓用全文本的Microsoft SQL 2005數據庫服務器(SP3)中。數據庫搜索引擎 - 根據特定相關性規則按相關性排序

現在,要求規定搜索可以在三個方面完成:書名,作者姓名和書籍文本。這本身很容易處理三個不同的查詢。但是,還有更多。該要求規定,搜索結果應該返回大致順序如下:

  • 完全符合標題
  • 全部作者姓名相匹配
  • 偏題匹配
  • 所有作者姓氏匹配
  • 部分作者姓氏比賽
  • 部分作者全名匹配
  • 書本文本匹配

此外,還有次級需求:從發佈者本身

  • 標題應當責令比相鄰出版商的高(有在同一個數據庫從十幾本書左右的出版商)
  • 當找到同名作者的完整匹配,應顯示同一作者的其他書籍(同一出版商的標題優先於另一個出版者 - 作者可以與多個出版商一起發佈)

很多像這樣的規則。

所以,假設你有一本書約翰遜,由作家皮特約翰遜(或任何)寫的。然後,搜索查詢 '約翰' 應該返回以下(ISH):

  • 約翰遜(書)(部分錦標賽)
  • 皮特·約翰遜(部分姓氏匹配)

與搜索查詢「約翰遜:

  • 約翰遜(書)(全名賽)
  • 約翰遜(書)(部分錦標賽)(略,已經在結果)
  • 皮特·約翰遜(作者)(全作者姓氏匹配)
  • 皮特·約翰遜(作者)(部分作者姓氏匹配)(略)
  • 皮特·約翰遜(作者)(部分作者全名匹配)(略)
  • 約翰遜(書)(書本文字匹配)(略)

...反正。這基本上是要求,我只是想輸入。現在,對於幾個問題:

  • 有沒有關於這個特定主題的任何書籍或文章,你可以指向我?
  • 這將如何實現?這可以在一組基本查詢中完成(針對每個搜索需求的單獨查詢,後期處理以刪除重複項併合並結果),還是可以在單個查詢中完成?
  • 或者我是否需要編寫一個應用程序索引表並創建自己的索引等,然後依次搜索查詢?

我在這裏有點想法和建議。

回答

1

CONTAINSTABLEFREETEXTTABLE函數 - 它們返回的RANK列是「相關性排名」。可能這些功能加上一些非文本列的複雜排序將完成這項工作。

如果您決定在您的應用中實施FTS,請查看第三方解決方案。 Lucene(或Lucene.NET)可能是很好的開始。