也许我错过了显而易见的事情,但我花了一整天的时间搜索和搜索,但运气不佳,无法解决这个问题。也许我使用的搜索字词不正确?从来没有,这就是我想要做的。
我有一个表格,上面有一个FULL-TEXT索引。当我运行以下内容时,我获得了预期的结果:
SELECT
A.*,
KEY_TBL.[Rank]
FROM
[dbo].[TableA] A
INNER JOIN
CONTAINSTABLE([dbo].[TableA], *, 'Jon OR Smith'
,5
) AS KEY_TBL
ON A.[Id] = KEY_TBL.[Key]
ORDER BY
KEY_TBL.[Rank] DESC
没问题。然而,我想要做的是将'Jon OR Smith'(或最终用户搜索的任何其他短语)作为存储过程的输入参数传递给查询。但是,当我尝试以下操作时,我得不到任何结果:
declare @search_phrase VARCHAR;
set @search_phrase = 'Jon OR Smith'
SELECT
A.*
KEY_TBL.[Rank]
FROM
[dbo].[TableA] A
INNER JOIN
CONTAINSTABLE([dbo].[TableA], *, @search_phrase
,5
) AS KEY_TBL
ON A.[Id] = KEY_TBL.[Key]
ORDER BY
KEY_TBL.[Rank] DESC
我忍不住觉得我在这里错过了明显的东西。我尝试过做SET @search_phrase = N'Jon OR Smith'
,但也没有结果。在SSMS中,我收到一条消息,指出“信息:全文搜索条件包含噪声字”。虽然我认为由于 OR 是一个停用词,我需要查询才能工作(不影响/关闭停用词)。我不禁觉得这应该是很多人想做/已经做过的事情,但我没有发现任何文章。
应该注意的是,搜索短语中可能有一个或多个单词,我会在将完成的搜索短语发送到存储过程之前进行预处理,以添加必要的“OR”。
有人能指出我出错的地方吗?
答案 0 :(得分:1)
看起来像是我,发布这个问题的类似建议让我得到答案。对于遇到这个"奇怪"行为,你需要确保每个单词都是双引号。
declare @search_phrase VARCHAR(50);
set @search_phrase = N'"Jon" OR "Smith"'
SELECT
A.*
KEY_TBL.[Rank]
FROM
[dbo].[TableA] A
INNER JOIN
CONTAINSTABLE([dbo].[TableA], *, @search_phrase
,5
) AS KEY_TBL
ON A.[Id] = KEY_TBL.[Key]
ORDER BY
KEY_TBL.[Rank] DESC