我有一个带有产品名称的专栏。有些名字看起来像'ab-cd''ab cd'
当用户输入'abc'(没有空格)时,是否可以使用全文搜索来获取这些名称? like
运算符正在为我工作,但我想知道是否可以使用全文搜索。
答案 0 :(得分:1)
不,遗憾的是你不能通过全文进行搜索。在这种情况下,您只能使用LIKE
LIKE ('ab%c%')
<强> EDIT1:强>
您可以创建一个视图(WITH SCHEMABINDING
!),其中包含您要搜索的id
和列名称:
CREATE VIEW dbo.ftview WITH SCHEMABINDING
AS
SELECT id,
REPLACE(columnname,' ','') as search_string
FROM YourTable
然后创建索引
CREATE UNIQUE CLUSTERED INDEX UCI_ftview ON dbo.ftview (id ASC)
然后在search_string
字段上创建全文搜索索引。
之后,您可以使用CONTAINS
搜索运行"abc*"
查询,它会找到您需要的内容。
<强> EDIT2:强>
但如果search_string
没有以您的搜索字词开头,它就无济于事。
例如:
ab c d - &gt; abcd 并搜索cd
答案 1 :(得分:1)
没有。全文搜索基于词语和短语。它不存储原始文本。事实上,根据配置,它甚至不会存储所有单词 - 所谓的停用词永远不会进入索引。例如:在英语中,“in”这个词的选择性不足以被认为值得存储。
有些名字看起来像'ab-cd''ab cd'
那些可能根本没有存储。至少第二个例子实际上是2个非常短的单词 - 很可能它们完全被忽略了。
所以,没有 - 全文搜索不适合这个。
答案 2 :(得分:1)
如果您想使用FTS查找彼此相邻的字词,例如用空格分隔的字词,则应使用邻近词。
您可以使用搜索词组as documented here中的NEAR
关键字或~
运算符来定义邻近词。
因此,如果您想立即找到ab
后跟cd
,您可以使用表达式,
'NEAR((ab,cd), 0)'
搜索单词ab
后跟单词cd
,其中包含0个字词。