【问题标题】:How to make full text query with AND when text spans several columns当文本跨越多列时如何使用 AND 进行全文查询
【发布时间】:2011-01-05 13:41:17
【问题描述】:

我们有几个全文索引字段的表。比如说,它是 firstName、surName 和 lastName。我正在寻找“John AND Smith”,显然这两个词很可能会写在不同的领域。查询不返回任何内容。如果我搜索“John OR Smith”,它就可以工作。

问题是:我能否以某种方式告诉 SQL Server,属于特定表的一行的所有字段都应该被视为一个连续的文本片段?

当然,我可以手动将字段连接到特殊字段并对其进行索引,但它看起来很傻。

以防万一,查询。这不是关于人的名字,而是想法是一样的:

SELECT [id], [type], [accessClass], [rank] 
FROM ( 
SELECT DISTINCT temp_result.* 
FROM ( 
    select SDF_Article.article_id [id], 
    6 [type], SDF_Object.accessClass [accessClass], RelevanceTable.[rank] [rank] 
    from SDF_Article inner join SDF_Object SDF_Object 
    on SDF_Article.article_id=SDF_Object.object_id 
    inner join SDF_Article_Locale SDF_Article_Locale 
    on SDF_Article.article_id=SDF_Article_Locale.article 
    inner join ContainsTable(SDF_Article_Locale, (title, body, brief),
    'FORMSOF (INFLECTIONAL, hello) AND FORMSOF (INFLECTIONAL, world)', Language 'Russian') RelevanceTable 
    on SDF_Article_Locale.entry_id=RelevanceTable.[KEY] 
    ) AS temp_result 
INNER JOIN SDF_RelationMap SDF_Map 
ON temp_result.[id] = SDF_Map.object AND SDF_Map.ancestor = 5 ) 
AS result ORDER BY [rank] desc

我们使用的是 SQL Server 2005。

【问题讨论】:

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


    【解决方案1】:

    一种解决方案是创建一个自动填充的列,将您希望索引和搜索的列连接起来。然后将全文索引器指向此列。然后,您只需围绕新列形成查询。

    【讨论】:

    • 我的意思是“手动连接字段”下的这种方法。它正在工作,但看起来仍然很傻。 :)
    • 它可能看起来很难看,但这确实是这样做的方法。
    【解决方案2】:

    事实证明,SQL Server 不支持此功能。更重要的是,这种行为在 2004 年被“修复”了: http://support.microsoft.com/default.aspx?scid=kb;en-us;294809

    我在 MS Connect 中添加了建议。请支持: https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=526862

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-29
      • 1970-01-01
      • 1970-01-01
      • 2011-08-18
      • 1970-01-01
      • 2013-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多