【问题标题】:SQL Server Full Text Search With Join Doesn't work as expected使用联接的 SQL Server 全文搜索无法按预期工作
【发布时间】:2017-12-20 00:21:22
【问题描述】:

使用 CONTAINS 谓词运行全文搜索查询在针对单个表完成时成功运行(简单查询)

SELECT *
FROM [dbo].[Entity] A 
WHERE CONTAINS(A.EntityName,'Test')

此查询返回与 CONTAINS 谓词匹配的多个结果。


SELECT *
FROM [dbo].[Entity] A 
INNER JOIN [dbo].[EntityLink] B
ON A.Id = B.EntityId

此查询还返回多个结果,其中 EntityName 包含短语 Test。


SELECT *
FROM [dbo].[Entity] A 
INNER JOIN [dbo].[EntityLink] B
ON A.Id = B.EntityId
WHERE CONTAINS(A.EntityName,'Test')

此查询不返回任何结果(我刚刚将包含谓词添加到第二个查询中)。 我尝试了多种选择,但我有点沮丧,因为它的表现不如预期。 为什么连接会阻止它正常工作?

【问题讨论】:

  • 您能否添加第二个查询(带有JOIN 但不带CONTAINS)返回的示例数据,特别是那些包含单词Test 的行?

标签: sql-server full-text-search


【解决方案1】:

查看带有CONTAINSTABLE的版本是否返回任何数据:

SELECT *
FROM [dbo].[Entity] A 
INNER JOIN [dbo].[EntityLink] B
ON A.Id = B.EntityId
JOIN CONTAINSTABLE([Entity], [EntityName], 'Test') as FTS
ON FTS.[KEY] = A.Id

CONTAINSTABLE 专门用于JOINs。但是,为了 100% 准确,我们需要根据我上面的评论使用JOIN 查看查询返回的数据。

【讨论】:

  • 这实际上运行但仍无法按预期工作。包含 CONTAINSTABLE 的示例: SELECT * FROM CONTAINSTABLE([Entity], [EntityName], 'Test') -> 成功返回所有等于 Test 的 entityNames。但是,如果您将 CONTAINSTABLE 更改为 CONTAINSTABLE([Entity], [EntityName], 'Te') 它不会返回任何结果(尽管有超过 10 个以 Te 开头的实体名称)
猜你喜欢
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 2017-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-12
相关资源
最近更新 更多