SQL包含奇怪的问题-忽略字符串的起始字符

SQL包含奇怪的问题-忽略字符串的起始字符,sql,tsql,sql-server-2005,full-text-search,full-text-indexing,Sql,Tsql,Sql Server 2005,Full Text Search,Full Text Indexing,我在sql全文索引方面遇到了一个奇怪的问题。基本上我是在搜索一个用来存放电子邮件地址的专栏。似乎在我测试的所有案例中都能正常工作,除了一个 SELECT * FROM Table WHERE CONTAINS(Email, '"email@me.com"') 对于某个特定的电子邮件地址,它完全忽略了上面的“电子邮件”部分,而是执行以下操作 SELECT * FROM Table WHERE CONTAINS(Email, '@me.com') 我能找到的只有一个案例是,这件事发生在我身上

我在sql全文索引方面遇到了一个奇怪的问题。基本上我是在搜索一个用来存放电子邮件地址的专栏。似乎在我测试的所有案例中都能正常工作,除了一个

SELECT *
FROM Table
WHERE CONTAINS(Email, '"email@me.com"') 
对于某个特定的电子邮件地址,它完全忽略了上面的“电子邮件”部分,而是执行以下操作

SELECT *
FROM Table
WHERE CONTAINS(Email, '@me.com') 
我能找到的只有一个案例是,这件事发生在我身上。我重新填充了索引,但没有乐趣。还重建了目录

有什么想法吗

编辑: 我不能把某人的电子邮件地址放在公共网站上,所以我会给出更合适的例子。导致问题的原因如下:

a.b.c@somedomain.net.au
当我这样做的时候

WHERE CONTAINS(Email, "'a.b.c@somedomain.net.au"')

返回的匹配行的格式都是
*@somedomain.net.au
。也就是说,它忽略了
a.b.c
部分。

在全文索引中将句号视为干扰字(或停止字),您可以通过检查系统停止字来查找排除字符的列表:

从sys.fulltext\u system\u stopwords中选择*其中language\u id=2057——这是英国英语的lang id(相应更改)

所以你的电子邮件地址是“a.b。c@somedomain.net.au实际上被视为“a b”c@somedomain.net.au“在这种情况下,由于单个字母也被排除在索引之外,因此您最终会在“@somedomain.net.au”上搜索”

您确实有两种选择,一种是在索引之前替换要包含的字符(因此用匹配标记替换特殊字符),另一种是从全文停止列表中删除要包含的单词/字符

NT//如果您选择后者,我会小心,因为这会使索引显著膨胀

以下是一些可以帮助您的链接:


请给我们展示数据/一个简单的“非”工作示例。
电子邮件的位置是否像'%email@me.com%“
工作?另外,如果要查找精确的值,为什么不使用equals运算符(
WHERE-Email=)进行比较呢email@me.com“
)?在你们的第一个例子中,你们有单引号和双引号,为什么。是的,like操作符工作得很好。我可能在寻找一个精确的值,但该列是一个电子邮件地址列表,用分号分隔。关键字
CONTAINS
用于搜索包含基于字符的数据类型的列,以查找与单个单词和短语的精确或模糊(不太精确)匹配,单词之间在一定距离内的接近程度,或加权匹配。你真的需要所有这些功能吗?如果没有,请使用
LIKE
关键字(您提到的关键字正如您所期望的那样有效)。是的。LIKE在这里执行得非常糟糕,我无法索引它,因为它是一个nvarchar(max)列!我明白你的意思,如果喜欢,那就用它来代替。但我更感兴趣的是为什么它不与CONTAINS操作符一起工作。看起来view/table
fulltext\u system\u stopwords
适用于2008年以后的版本。任何2005版本。我想最后我会用别的东西来代替句号。谢谢