撇号和SQL Server FT搜索

3

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

我已经对这个问题反复思考了一段时间,所以任何帮助都将是一种祝福。

3个回答

1

编辑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')


1
嗯...这个可以用,但是短语搜索怎么办呢?这更适合精确术语搜索。 - vintana

0

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

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

这允许撇号出现在数据库值或搜索术语中。但显然,对于大表格来说,它的性能会像一只狗一样。

另一个选择(也可能不是一个好选择)是保存第二份数据,剥离非字母字符,并对该副本进行搜索。因此,原始数据将包含“Lia's”,而第二个副本将包含“Lias”。这将导致存储量增加一倍等问题。


将文本列复制到另一个列中,减去撇号,这是我考虑的最后一招。但这似乎不太对。Lucene.NET或其他搜索方式可以解决这个问题吗? - vintana

0

另一次尝试:

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

对我而言(未启用FT),这个方法有效,即搜索O'Connor或OConnor得到相同结果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接