2014-10-20 147 views
2

我有我的數據庫在SQL Server 2012上運行。我的表中的一列包含RTF文本。列的數據類型是nvarchar(MAX)。RTF上的SQL Server 2012全文搜索

我想爲此欄設置一個全文搜索,分析rtf並僅在實際文本中搜索,以便我不會將rtf標記作爲結果。

據我所知,解析rtf應該已經是SQL Server的一部分。但我不明白它的工作:-(

我以下:

  • 創建全文目錄
  • 選擇列包含RTF並添加full_text指數

但我仍然得到錯誤的結果

SELECT * FROM myTable WHERE 
CONTAINS(myRtfColumn,'rtf') 

- >仍然獲得所有列,因爲'rtf'是關鍵字

任何想法我做錯了什麼?我必須激活rtf搜索我的SQL Server或類似的東西嗎?

回答

0

全文搜索僅適用於文本列。你在你的數據庫中插入二進制文件 - > rtf。當你選擇了nvarchar時,你告訴了你想要存儲文本的sql server,但是你正在存儲二進制文件。對於二進制的東西使用varbinary(max)來代替。

問題仍然存在,因爲索引例程不知道如何解釋richtext - 什麼是控件字符什麼是內容。

讓我們談談解釋器/過濾器

文件說: https://technet.microsoft.com/en-us/en-en/library/ms142531(v=SQL.105).aspx

VARBINARY(最大值)或varbinary數據 單一的varbinary(最大)或varbinary列可以存儲多種類型的文件。 SQL Server 2008支持在操作系統中安裝過濾器並可用的任何文檔類型。每個文檔的文檔類型由文檔的文件擴展名標識。例如,對於.doc文件擴展名,全文搜索使用支持Microsoft Word文檔的過濾器。有關可用文檔類型的列表,請查詢sys.fulltext_document_types目錄視圖。

請注意,全文引擎可以利用操作系統中安裝的現有過濾器。在可以使用操作系統過濾器,斷字符和詞幹,你必須加載它們的服務器實例,如下所示:

最後TODO:

檢查「的.rtf」是可用的過濾器。

EXEC sp_help_fulltext_system_components 'filter'; 

然後計算的列添加到您表「典型」,它總是返回

alter table yourname add [Typ] AS (CONVERT([nvarchar](8),'.rtf',0)); 

這現在可以用於索引類型規範「的.rtf」。