Sql server 为什么不是';我的单字符全文搜索不起作用吗?
根据这段代码,我没有得到任何结果:Sql server 为什么不是';我的单字符全文搜索不起作用吗?,sql-server,full-text-search,sql-server-2014,Sql Server,Full Text Search,Sql Server 2014,根据这段代码,我没有得到任何结果: SELECT TOP 10 * FROM MyTable WHERE CONTAINS(TextColumn, '"W"') 我检查过的东西: 长单词返回结果 没有与此索引关联的停止列表 专栏中肯定有“詹姆斯·W·布朗”这样的文字 全文索引是最新的 编辑:我正在查找与索引关联的停止列表,而不是停止词。全文搜索是一项功能,用于执行特定语言搜索 搜索可能会忽略数据中的文字字符串,并搜索语言中特定的单词(特定单词的屈折形式、同义词等),这是特定于语言的 在您的
SELECT TOP 10 * FROM MyTable WHERE CONTAINS(TextColumn, '"W"')
我检查过的东西:
- 长单词返回结果
- 没有与此索引关联的停止列表
- 专栏中肯定有“詹姆斯·W·布朗”这样的文字
- 全文索引是最新的
编辑:我正在查找与索引关联的停止列表,而不是停止词。
全文搜索
是一项功能,用于执行特定语言搜索
搜索可能会忽略数据中的文字字符串,并搜索语言中特定的单词(特定单词的屈折形式、同义词等),这是特定于语言的
在您的查询中,您正在查找字母“W”
,它在英语中不是一个单词,它是一个字母表,但仅此而已,它没有任何意义。它更像是字符串中的一个pattern。为此,您应该使用like
关键字以及通配符%
,这将返回字符串值James W Brown
另一方面,如果您想使用FTS在数据库中查找所有可能的
James
,那么FTS就很方便了。通过对James进行同义词表搜索,将返回Jim、Jimmy、Jimmie等,但您必须再次编辑特定语言的FDData下的XML文件才能实现这一点 答案是确保您有一个与索引关联的空停止列表。仅仅没有停止列表是不够的,因为它只会使用默认的停止列表
CREATE FULLTEXT STOPLIST [EmptyStopList] ;
GO
ALTER FULLTEXT INDEX ON MyTable SET STOPLIST [EmptyStopList]
引用是问题所在吗?(我从未使用过contains函数,我只会使用LIKE)
contains
不是用于那种搜索,你可以阅读它。Contains用于搜索单词或单词的前缀,搜索多个单词或确保您不是指“and”或“NEAR”等关键字时需要引号之类的内容。这个答案表明W可能是一个停止词()看起来有人正在进行投票否决,乔纳森发布的答案被否决了。有些小丑被释放了。别担心他们。尽管他们在生活中没有什么力量,但他们倾向于充分利用它。全文搜索不仅仅局限于特定语言中的单词。我可以做CONTAINS(StreetAddress,““123”)
并返回“123 Main St.”@JonathanAllen FTS,因为这样的搜索太过分了,LIKE
应该用在你提到的例子中。@M.Ali,LIKE不是正确的答案。它进行全表扫描,不理解整词的概念。