我已经在 SQL Server 2005 中设置了 FT 搜索,但我似乎找不到将“Lias”关键字与带有“Lia's”的记录相匹配的方法。我基本上想要的是允许人们在没有撇号的情况下进行搜索。
我已经断断续续地解决这个问题很长一段时间了,所以任何帮助都将是一种祝福。
我已经在 SQL Server 2005 中设置了 FT 搜索,但我似乎找不到将“Lias”关键字与带有“Lia's”的记录相匹配的方法。我基本上想要的是允许人们在没有撇号的情况下进行搜索。
我已经断断续续地解决这个问题很长一段时间了,所以任何帮助都将是一种祝福。
编辑2:刚刚意识到这实际上并不能解决您的问题,请忽略并查看其他答案!下面的代码将返回用户插入不应该存在的撇号的情况的结果,例如“abandoned it's cargo”。
我没有在本地安装 FT,也没有对此进行测试 - 您可以使用 CONTAINS 的语法来测试原始事件和撇去撇号的事件,即:
SELECT *
FROM table
WHERE CONTAINS ('value' OR Replace('value', '''',''))
编辑:您可以使用双引号搜索短语,例如
SELECT *
FROM table
WHERE CONTAINS ("this phrase" OR Replace("this phrase", '''',''))
有关CONTAINS 的信息,请参阅MSDN 文档。这实际上表明标点符号无论如何都被忽略了,但我还没有测试过;它可能值得CONTAINS('value')
自己尝试。
我没有使用过 FT,但在对 varchar 列进行查询以及查找 O'Reilly 等姓氏时,我使用过:
surname like Replace( @search, '''', '') + '%' or
Replace( surname,'''','') like @search + '%'
这允许撇号在数据库值或搜索词中。它显然也会像一条大桌子的狗一样表现。
另一种选择(也可能不是一个好方法)是保存数据的第二个副本,去除非字母字符,然后针对该副本进行搜索(也是?)。因此,原版将包含 Lia 的和第二版 Lias。存储量翻倍等
另一种尝试:
SELECT surname
FROM table
WHERE surname LIKE '%value%'
OR REPLACE(surname,'''','') LIKE '%value%'
这对我有用(没有启用 FT),即我在搜索 O'Connor 或 OConnor 时得到相同的结果。