Apostrophes和SQL Server FT搜索

时间:2009-03-24 02:55:53

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

我在SQL Server 2005中设置了FT搜索,但我似乎无法找到一种方法将“Lias”关键字与“Lia's”匹配。我基本上想要的是允许人们在没有撇号的情况下进行搜索。

我已经在这个问题上做了很长一段时间了,所以任何帮助都真的是一种祝福。

3 个答案:

答案 0 :(得分:1)

编辑2:刚刚意识到这实际上并没有解决你的问题,请忽略并看到其他答案!下面的代码将返回用户插入不应该存在的撇号的情况的结果,例如“放弃它的货物”。

我没有在本地安装FT并且没有对此进行测试 - 您可以使用CONTAINS的语法来测试原始出现和带有撇号的剥离,即:

SELECT *
FROM table
WHERE CONTAINS ('value' OR Replace('value', '''',''))

编辑:您可以使用双引号搜索短语,例如

SELECT *
FROM table
WHERE CONTAINS ("this phrase" OR Replace("this phrase", '''',''))

MSDN documentation for CONTAINS。这实际上表明标点符号无论如何都会被忽略,但我还没有测试过;可能值得自己尝试CONTAINS('value')

答案 1 :(得分:0)

我没有使用过FT,但是在对varchar列进行查询,并寻找像O'Reilly这样的姓氏时,我用过:

surname like Replace( @search, '''', '') + '%' or
Replace( surname,'''','') like @search + '%' 

这允许撇号位于数据库值或搜索项中。它显然也会像一只带有大桌子的狗一样表现。

替代方案(也可能不是一个好的方法)是保存数据的第二个副本,去掉非字母字符,并对该副本进行搜索(也是?)。所以原版将包含Lia's和第二版Lias。加倍存储量等。

答案 2 :(得分:0)

另一次尝试:

SELECT surname
FROM table
WHERE surname LIKE '%value%'
OR REPLACE(surname,'''','') LIKE '%value%'

这对我有用(没有启用FT),即在搜索O'Connor或OConnor时得到相同的结果。