如果要在WHERE子句里设置全文搜索的查询条件,可以使用CONTAINS和FREETEXT两个谓词;如果要在FROM子句里设置全文搜索的查询条件 ,可以使用CONTAINSTABLE和FREETEXTTABLE两个行集值函数.
(7.1)使用CONTAINS搜索
CONTAINS用于SELECT语句的WHERE子句中,可以支持使用复杂的语法在字符列中搜索词、子句、衍生字或位置相近的字符串。使用CONTAINS谓词可以在数据表中使用以下五种形式搜索数据:
简单词:也就是可以搜索一个或多个特定的词或短语。词可以包括一个或多个字符,中间没有空格或标点。短语可以是由空格分隔的多个词组成,但词之间可以有标点也可以没标点。
派生词:也就是可以搜索特定词的变形,一般是指英语中的单词,其有过去式、现在式、将来式等不同的形式。派生词是指可以包含该单词的所有其他形式。
前缀词:也就是可以搜索指定文本开头的词或短语。一般也用于英文单词中,可以指定一个英文单词的前几个字母来作为搜索条件。
加权词:也就是可以给多个搜索条件加上权值,加权值越高的记录排在越前面。
邻近词:也就是可以搜索与另一个词或短语相邻近的词或短语。
下面分别介绍如何使用这些不同的方式来搜索数据
CONTAINS 具體語法請參考聯機幫助!
(7.1.1)简单词的搜索方式
简单词的搜索方式就是搜索一个或多个特定的词或短语。
例一、搜索文章表的标题中含有“上海”的记录,其代码如下:
SELECT * FROM 文章 WHERE CONTAINS(标题,上海)
例二、搜索文章表的内容中含有“上海”或“广州”的记录,其代码如下:
SELECT * FROM 文章 WHERE CONTAINS(内容, \上海\OR \广州\
注意例二与例一的不同,在CONTAINS谓词的第二个参数里,将“”上海” OR “广州””做为一个字符串传递CONTAINS。使用以下代码将会出错:SELECT * FROM 文章 WHERE CONTAINS(内容, 上海‘ OR ’广州)
(7.1.2)派生词的搜索方式
派生词的搜索方式主要用在英文当中,因为英文单词中含有现在式、过去式、将来式、单复数等不同的形式,使派生词的搜索方式可以将字段中包括该单词的所有形式的记录都搜索出来。例如使用派生词方式搜索包含单词download的记录,则会把包含download、downloading等派生词的记录都搜索出来。
例三、搜索文章表中内容中含有download及其派生词的记录,其代码如下:
SELECT * FROM 文章 WHERE CONTAINS(内容,FORMSOF(INFLECTIONAL,download))
注意CONTAINS谓词的不同处,运行结果如图7.1所示
7.1運行結果
在图7.1中可以看到只查询到一条记录,而并未将download的派生词也搜索进来,这是因为从一开始设置全文索引时,所采用的是数据库默认的断字符语言,即简体中文,而在中文中没有派生词,所以使用派生词方式搜索数据是起不到其作用的。此时可以通过修改全文索引的断字符语言来达到搜索效果。修改方式如下:
(1)右击全文索引所在的数据表,在弹出的快捷菜单中选择【全文索引】--【属性】--【全文索引属性】对话框。
(2)在【全文索引属性】对话框里选择【列】选项,弹出如图7.2所示对话框,修改【内容】字段的【断字符语言】为“English”。
7.2 修改断字符语言
(3)单击【确定】按钮完成操作。
再次运行例三中的代码,其运行结果如图7.3所示。
7.3正确的运行结果
(7.1.3) 前缀词的搜索方式
前缀词的搜索方式主要也是用在搜索英文中,例如搜索以“do”开头的单词,则可以将doctor、document、download等单词都搜索出来。
例四、搜索文章表中内容中含有“do”开头的单词的记录,其代码如下:
SELECT * FROM 文章 WHERE CONTAINS(内容, \)
此方式有点类似与like子句的通配符方式,但只能使用“*”,并且只能放在英文字母之后,如“*do”、“*do*”都是错误的表达方式。
(7.1.4)加权词的搜索方式
当以多个字符串作为搜索条件搜索记录时,可以为不同的字符串加上一个加权值,这个加权值是介于0和1之间的数值,加权值越高的记录排在越前面
例五、搜索文章表中内容中含有“download\条件加上加权值,其代码如下:
SELECT * FROM 文章 WHERE CONTAINS(内容,ISABOUT (\weight(0.9),\上海\ weight(0.6),\山西\ weight(0.5)))
或
SELECT * FROM 文章 WHERE CONTAINS(内容, ISABOUT (download weight(0.9),上海 weight(0.6),山西 weight(0.5)))
事实上在该SELECT语句的返回结果集里,并没有按加权值的大小来排序,因为WEIGHT不影响CONTAINS查询的结果,只会影响CONTAINSTABLE查询中的排序。说明:使用本例时最好将“内容”字段的“断字符语言”改回简体中文,否则会影响中文的搜索结果
(7.1.5)邻近词的搜索方式