我有一个表,其中有一个类型为nvarchar的列。该表可以增长到具有相当多的条目。可以在此特定列上执行搜索,以便对于GUI上的某些条目,实现的存储过程是查找所有匹配项。在那个检查字符串匹配的sp逻辑是在该特定列上使用LIKE%entered_phrase%。 现在,由于这可能效率很低,我想对该特定列使用全文搜索。
CREATE UNIQUE INDEX ui_MyId ON MyTable(Id);
CREATE FULLTEXT CATALOG ft_mycatalog AS DEFAULT;
CREATE FULLTEXT INDEX ON MyTable(MyColumn)
KEY INDEX ui_MyId
WITH STOPLIST = SYSTEM;
然而,当我执行时:
select * FROM MyTable
WHERE CONTAINS(MyColumn, 'some_term')
不返回任何记录。我做错了什么? (与LIKE相同,当然有效)
Id MyColumn
1 12345some_termwsdjf4sd
2 sdfsjdsfsdfsdfsdsome_term5dgd
3 4l00lko0dfsdfsome_term
所以它应该返回所有3个条目。当然,在这个表中有更多列,但它们现在无关紧要。
答案 0 :(得分:0)
据我所知,'Contains'仅在单词与作为搜索键传递的特定单词匹配时才返回 - 不是部分匹配。但是,您可以强制“包含”以返回包含以特定搜索键开头的单词的结果,如此示例
select * FROM MyTable
WHERE CONTAINS(MyColumn, '"some*"')
它将为您提供在MyColumn中以“some”开头的单词的结果。 这是Technet link
我的建议是使用'like'而不是'Contains'。