2011-10-05 87 views
2

我在sql server 2005中有一個xml數據類型字段的表,我在那裏存儲了xml內容,並且我已經啓用了全文搜索。在sql server 2005中全文搜索和xml內容2005

我面臨的問題是,搜索不選擇存儲在字段中的屬性值。它在節點上搜索文本輸入。

這裏是我的查詢:

select * from document_content where FREETEXT (doc_content_xml,'"2010 SKCA 136 para 46"') 

在數據我有以下包含該文本的屬性,但表示0的結果搜索結果XML節點。

<p class="para"> 
    <number value="2010 SKCA 136 para 46" class="num"> 
    [46] 
</number> 
</p> 

據檢索,如果標記就像

<p class="para"> 
    <number value="2010 SKCA 136 para 46" class="num"> 
    2010 SKCA 136 para 46 
</number> 
</p> 

任何幫助將不勝感激。

回答

1

據我所知,這些屬性將永遠不會被編入索引。我和你的情況一樣,而且我讀過的東西都告訴過我。這是SQL全文索引在XML數據類型上的工作方式。有一個名爲iFilter的東西,它定義了它如何被索引,並且它不能被重寫。其他數據類型也是如此。

MS SQL服務器將僅索引XML值,並且僅索引「頂級且不是數字」的屬性。

您可以將XML作爲「FILE」數據類型存儲在SQL中,並實現您自己的iFilter dll,然後在SQL服務器的Windows中註冊並註冊iFilter文件類型以匹配「FILE」文件類型的文件類型數據類型。這是你必須在C++中完成的高級內容。

除非在XML上運行XPath查詢,否則可以隨時將類型更改爲varchar或任何其他將作爲文本索引的TEXT類型。

也許可以添加僅存在於搜索中的元數據列。 varchar(max)列中的XML副本,它將被索引爲文本。

我的XML包含您的典型密鑰,其中密鑰存儲爲屬性的值信息,我無法使用Contains()訪問它,因爲只有值被索引。

更新: 我最終的解決方案是全文索引XML,然後做2次搜索。 Pass 1通過全文搜索縮小了XML的結果。第2階段執行XPath查詢以結果結束。這樣做比只執行XPath更快。