2011-10-05 67 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更快。