SQL XML全文搜索

时间:2014-10-03 13:12:42

标签: sql sql-server full-text-search xquery xquery-sql

我正在将搜索功能实现到网络应用程序中,并在我的表格中的多个列上启用了全文搜索。

其中一列的数据类型为“xml”,我目前正在使用XQuery来确保只搜索某些节点。

以下是SQL查询的XQuery部分示例(SQL-Query是生成/动态查询)

XMLContent.exist('/Template/Fields/Field/Text/text()[contains(.,"search-phrase1") or contains(.,"search-phrase2") or contains(.,"etc.")]') = 1

动态查询可以将任意数量的搜索短语放入查询中。

当我学习如何编写此查询时,我得到的印象是这是使用全文搜索,但我尝试删除XMLContent列上的全文索引,但查询仍在运行。

我的问题是,在sql中使用CONTAINS函数搜索整个XMLContent列是否更快,或者当我将其缩小到xml中的特定节点时它是否更快?

除了CONTAINS检查所有节点而不是指定的节点之外,不同的方法是否有其自身的好处?

1 个答案:

答案 0 :(得分:2)

它们是2个不同的包含函数。他们不会互相交谈。

  1. 全文包含:包含(XmlContent,'福特')
  2. Xml包含:XmlContent.exist(' / Cars / text()[contains(。," Ford")]')= 1
  3. 我有一个包含10000行的表,在SSMS中运行3个以下查询包含实际执行计划

    Select * from TableA where Contains(XmlContent,'Ford') and XmlContent.exist('/Cars/text()[contains(.,"Ford")]') =1
    Select * from TableA where Contains(XmlContent,'Ford')
    Select * from TableA where XmlContent.exist('/Cars/text()[contains(.,"Ford")]') =1
    

    执行计划显示

    Query1: Query Cost (relative to the batch): 3%
    Query2: Query Cost (relative to the batch): 2%
    Query3: Query Cost (relative to the batch): 95%
    

    全文包含()可以非常快速地排除不相关的行。强烈推荐。你可以使用这两个版本' of contains()。

    不确定特定节点缩小,您可以在SSMS中编写类似的查询,它会告诉您它是否有效。

    这是MSDN页面