我已经在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", '''',''))
请参阅MSDN文档中的CONTAINS。实际上,这表明标点符号无论如何都会被忽略,但是我还没有测试过;也许值得尝试仅使用CONTAINS('value')
。
我没有使用过FT,但在对varchar列进行查询并查找像O'Reilly这样的姓氏时,我使用了:
surname like Replace( @search, '''', '') + '%' or
Replace( surname,'''','') like @search + '%'
这允许撇号出现在数据库值或搜索术语中。但显然,对于大表格来说,它的性能会像一只狗一样。
另一个选择(也可能不是一个好选择)是保存第二份数据,剥离非字母字符,并对该副本进行搜索。因此,原始数据将包含“Lia's”,而第二个副本将包含“Lias”。这将导致存储量增加一倍等问题。
另一次尝试:
SELECT surname
FROM table
WHERE surname LIKE '%value%'
OR REPLACE(surname,'''','') LIKE '%value%'
对我而言(未启用FT),这个方法有效,即搜索O'Connor或OConnor得到相同结果。