SQL Server全文搜索-匹配所有单词但忽略顺序

时间:2019-06-21 13:03:31

标签: sql-server sql-server-2012 full-text-search

在SQL Server 2016上使用SQL Server全文搜索时遇到问题。

我想做的是查找包含查询文本中所有单词的所有行,但是不在乎查询文本中单词的顺序。

例如,如果一列是:

"this is my first hello world sql code"

我想通过以下任一查询文本找到此行:

"hello"
"hello world"
"world hello"

我的想法是将查询文本拆分为单词列表,并在将文本传递给CONTAINS谓词之前将其与AND结合在一起。 例如,如果查询文本为“世界你好”,我将使用CONTAINS谓词:

CONTAINS(text, 'world AND hello')

我还考虑了查询文本中的停用词,因此在将这些词与AND结合使用之前,我首先要删除查询文本中的所有停用词。

例如,如果查询文本为“ this is my”,则CONTAINS中使用的最终文本为:

CONTAINS(text, 'this AND my')

“ is”一词已从文本中删除。我有一个停用词列表,其中包含从 sys.fulltext_system_stopwords表中检索到的所有SQL Server默认停用词。

到目前为止,一切都很好。但是问题是,如果文本中包含特殊字符,则无法使用。

例如,一行包含以下值:

"AT & T is cool"

查询文本为“ AT&T”,如果我仅使用以下代码,则不会返回结果:

CONTAINS(text, 'AT AND & AND T')

相反,我应该在加入单词之前删除“&”。类似于所有其他特殊字符,例如'-','+','*'等。

但是问题是,在构建反向索引令牌时,哪里可以获得SQL Server删除的特殊字符的完整列表?

或者还有其他解决方案可以满足我所有单词匹配的要求吗?

0 个答案:

没有答案