在表格中的一列上进行全文搜索

时间:2015-08-20 17:36:39

标签: sql sql-server tsql

我有一个表,其中有一个类型为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个条目。当然,在这个表中有更多列,但它们现在无关紧要。

1 个答案:

答案 0 :(得分:0)

据我所知,'Contains'仅在单词与作为搜索键传递的特定单词匹配时才返回 - 不是部分匹配。但是,您可以强制“包含”以返回包含以特定搜索键开头的单词的结果,如此示例

select * FROM MyTable
WHERE CONTAINS(MyColumn, '"some*"')

它将为您提供在MyColumn中以“some”开头的单词的结果。 这是Technet link

我的建议是使用'like'而不是'Contains'。