sql server 2005中的全文搜索和xml内容

时间:2011-10-05 19:53:27

标签: sql-server sql-server-2005

我在sql server 2005中有一个包含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>

正在搜索标记是否像

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

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

据我所知,这些属性永远不会被编入索引。我和你的情况一样,我读过的任何内容都没告诉我。这是SQL全文索引在XML数据类型上的工作方式。有一个名为iFilter的东西定义了它的索引方式,并且它不能被覆盖。其他数据类型也是如此。

MS SQL服务器只会索引XML值,而只会索引“顶级且不是数字”的属性。

您可以将XML存储为SQL中的“FILE”数据类型,并实现您自己的iFilter dll,然后在SQL服务器上的Windows中注册并注册iFilter文件类型以匹配“FILE”数据类型的文件类型。这是你必须用C ++做的高级内容。

除非在XML上运行XPath查询,否则您始终可以将类型更改为varchar或任何其他将被编入索引为文本的TEXT类型。

可能会添加仅用于搜索的元数据列。 varchar(max)列中XML的副本,该列将被索引为文本。

我的XML包含您的典型密钥,值信息,其中密钥存储为属性,我无法使用Contains()访问它,因为只有值被索引。

更新: 我最终得到的解决方案是全文索引XML,然后对搜索进行2次传递。第1遍通过全文搜索缩小XML的结果。 Pass 2执行XPath查询以得到结果。这比仅执行XPath更快。