Sql server SQLServer2005中的全文搜索和xml内容

Sql server SQLServer2005中的全文搜索和xml内容,sql-server,sql-server-2005,Sql Server,Sql Server 2005,我在SQLServer2005中有一个带有xml数据类型字段的表,我正在其中存储xml内容,并且我已经启用了对它的全文搜索 我面临的问题是,搜索没有拾取存储在字段中的属性值。它搜索节点上输入的文本 我的问题是: select * from document_content where FREETEXT (doc_content_xml,'"2010 SKCA 136 para 46"') 在数据中,我有以下xml节点,其中包含此文本作为属性,但搜索结果显示0结果 <p class

我在SQLServer2005中有一个带有xml数据类型字段的表,我正在其中存储xml内容,并且我已经启用了对它的全文搜索

我面临的问题是,搜索没有拾取存储在字段中的属性值。它搜索节点上输入的文本

我的问题是:

  select * from document_content where FREETEXT (doc_content_xml,'"2010 SKCA 136 para 46"')
在数据中,我有以下xml节点,其中包含此文本作为属性,但搜索结果显示0结果

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

[46]

它正在搜索标记是否与

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

2010 SKCA 136第46段


任何帮助都将不胜感激

据我所知,这些属性永远不会被索引。我的处境和你一样,我所读到的都没有告诉我其他的情况。这是SQL全文索引处理XML数据类型的方式。有一个名为iFilter的东西定义了它的索引方式,它不能被重写。其他数据类型也是如此

MS SQL server将仅为XML值和“顶级且不是数字”的属性编制索引

您可以将XML存储为SQL中的“文件”数据类型,并实现自己的iFilter dll,然后在SQL server上的Windows中注册该dll,并注册iFilter文件类型以匹配“文件”数据类型的文件类型。这是C++中必须做的高级的事情。 除非在XML上运行XPath查询,否则始终可以将类型更改为varchar或任何其他将作为文本索引的文本类型

也许可以添加一个仅用于搜索的元数据列。varchar(max)列中的XML副本,该列将作为文本索引

我的XML包含典型的键、值信息,其中键作为属性存储,我无法使用contains()访问它,因为只有值被索引

更新: 我最终得到的解决方案是对XML进行全文索引,然后进行2次搜索。Pass 1通过全文搜索缩小XML的结果范围。Pass 2执行XPath查询以得到一个结果。这比只使用XPath要快得多