在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删除的特殊字符的完整列表?
或者还有其他解决方案可以满足我所有单词匹配的要求吗?