从SQL Server全文搜索中排除撇号

5

我想知道如何在全文搜索中排除撇号。

例如,如果有人输入搜索词“o'brien”或“obrien”,我希望它能匹配所有姓名为“O'Brien”或“OBrien”的情况。

但是,如果我搜索:

select * from MyTable where contains (fullName, '"o''Brien*"')

它只返回带撇号的单词。 但如果我这样做:
select * from MyTable where contains (fullName, '"oBrien*"')

它只返回没有撇号的那些。

简而言之,我想知道是否可能让FTS将“O'Brien”和“OBrien”都索引为“obrien”,以便我可以找到两者。

虽然解决方案是:

select * from MyTable where contains (fullName, '"oBrien*" OR "o''Brien*"')

如果用户输入了“obrien”,那么原来的方法可能行不通。

我正在寻找一种既适用于SQL Server 2005,又适用于SQL Server 2008的解决方案。


SQL Server的版本是多少?(全文搜索在2005年和2008年之间有很大变化) - Martin Smith
可能是 https://dev59.com/jkbRa4cB1Zd3GeqP5fpQ 的重复问题。 - Jacob Mattison
可能的重复项是针对 SQL 2005 特定的。 - Martin Smith
“the possible dupe is 2005 specific” 是什么意思? - Avrom
@Avrom - 我是在回应Jacob的“可能重复”的链接。 - Martin Smith
1个回答

0

根据您拥有的空间大小,您可以添加另一列

fullName_noPunctuation

仅包含名称中的字母字符,从搜索条件中去除标点符号,并搜索无标点符号的列。


这对我可能有用。我得研究一下。不过,如果有一种方法可以将“O'Brien”和“OBrien”仅索引为“obrien”,那就更好了。 - Avrom
添加了一个新列,其中“fullName”去掉了其撇号,并在其上创建了一个FTS索引。它能够使用包含(fullSearch,'“obrien*”')找到O'Briens和Obriens。 - Avrom

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