SQLServer 全文检索(full-text)语法

SQLServer 全文检索(full-text)语法,第1张

概述sql server 全文检索有两种搜索方式,一种是contains,另一种是freetext。前者是包含,类似于like ‘%关键词%‘,后者则是将一段文字分词以后对每个词进行搜索。 具体语法:    contains:  SELECT 字段1,字段2  FROM 表名  WHERE contains(字段,‘"词一" or "词二"‘)  根据查找结果的相似度排

sql server 全文检索有两种搜索方式,一种是contains,另一种是freetext。前者是包含,类似于like ‘%关键词%‘,后者则是将一段文字分词以后对每个词进行搜索。

具体语法:

  

contains:  SELECT 字段1,字段2  FROM 表名  WHERE contains(字段,"词一" or "词二")  根据查找结果的相似度排序  SELECT 字段1,字段2  FROM 表名  inner join containstable(表名,字段,"词一" or "词二",10) as k  on 表名.ID = k.[key]  order by k.RANK DESC  freetext:  SELECT 字段1,字段2  FROM 表名  WHERE freetext(字段,词一词二)  根据查找结果的相似度排序  SELECT 字段1,字段2  FROM 表名  inner join freetexttable(表名,词一词二,10) as k  on 表名.ID = k.[key]  order by k.RANK DESC

上文中freetexttable或containstable的10表示取10条数据

 

具体详细 *** 作:

数据库数据执行任意文本查询:

 1.使用FREETEXT谓词 FREETEXT接受两个参数。

第一个参数表示要搜索的列,可以提供列名,或者用*字符搜索表中的所有列。

第二个参数表示要搜索的短语。

例: select Title from Titles where FREETEXT(Title,‘secret computer‘)

该SQL语句将数据库表Titles中的Title列中的内容包括secret或computer的纪录查询出来 。

 2.使用freetexttable函数 freetexttable接受三个参数。

第一个参数表示要搜索的表,

第二个参数表示要搜寻的列,

第三个参数表示要搜索的短语。它返回一个表,表中包含KEY和Rank两列,key表示与此匹 配相关联的纪录的惟一键。rank表示结果与查询的匹配程度,1000表示最佳,0表示最差。

例:select * from freetexttable(Titles,Title,‘a book about silicon valley‘) searchtable

此SQL语句返回表searchtable,表中有两列,key和rank。

 数据库数据的布尔查询:

 1.使用CONTAINS谓词

CONTAINS接受两个参数:要搜索的列和搜索短语。

1)搜索特定的词或短语(简单词)

例:select Title from Titles where contains(Title,‘computer and not cooking‘)

此例返回Title里包含computer的纪录不返回包含cooking的纪录,因为 and not。

如果短语中有词组

如:select student_ID,student_name from students where CONTAINS( address,‘"HEIBEI province"‘ );也可以用CONTAINS( address,‘"HEIBEI province"‘ )

2)执行前缀搜索(前缀词)

如果查询以‘hu’开头的地址:

SELECT student_ID,student_name FROM students WHERE CONTAINS( address,‘"hu*"‘ )

这里是‘*’,而不是‘%’。

 3)搜索特定词的变形(派生词)

1 1SELECT Comments,RevIEwername2  FROM Production.ProductRevIEw33 WHERE CONTAINS (Comments,FORMSOF(INFLECTIONAL,"foot"))

4)使用加权值搜索词或短语(加权词)

1 SELECT Addressline1,KEY_TBL.RANK 2 FROM Person.Address AS Address INNER JOIN3 CONTAINStable(Person.Address,Addressline1,ISABOUT ("Bay*",4          Street WEIGHT(0.9),5          VIEw WEIGHT(0.1)6          )  ) AS KEY_TBL7 ON Address.AddressID = KEY_TBL.[KEY]8 ORDER BY KEY_TBL.RANK DESC

5)查询 varbinary(max) 和 xml 列

如果 varbinary(max)、varbinary 或 xml 列是全文索引列,则与任何其他全文索引列一样,可以使用全文谓词(CONTAINS 和 FREETEXT)以及函数(CONTAINStable 和 freetexttable)来查询该列。

单个 varbinary(max) 或 varbinary 列可以存储多种类型的文档。 sql Server 支持安装了相应筛选器并且在 *** 作系统中可用的任何文档类型。 每个文档的文档类型由该文档的文件扩展名标识。 例如,对于 .doc 文件扩展名,全文搜索将使用支持 Microsoft Word 文档的筛选器。

全文引擎可以利用 *** 作系统中安装的现有筛选器。 在您可以使用 *** 作系统筛选器、断字符和词干分析器之前,您必须将它们加载到服务器实例中,如下所示:

 EXEC sp_fulltext_service @action=load_os_resources,@value=1

--varbinary(max) 或 varbinary 数据

若要对 varbinary(max) 列创建全文索引,全文引擎需要访问 varbinary(max) 列中文档的文件扩展名。 此信息必须存储在一个称为“类型列”的表列中,该列必须与全文索引中的 varbinary(max) 列相关联。 在为文档创建索引时,全文引擎将使用类型列中的文件扩展名来标识要使用的筛选器。

--xml 数据

xml 数据类型列仅存储 XML 文档和片段,并且只有 XML 筛选器用于此类文档。 因此,无需类型列。 在 xml 列上,全文索引会为 XML 元素的内容创建索引,但会忽略 XML 标记。 不为数值的属性值都会进行全文索引。 元素标记用作标记边界。 支持包含多种语言的格式正确的 XML 或 HTML 文档和片段。

@H_156_404@6)使用布尔运算符 – AND、OR 和 NOT – 在 CONTAINS 和 CONTAINSTABLE 中

CONTAINS 谓词和 CONTAINStable 函数使用相同的搜索条件。 它们都支持使用布尔运算符(AND、OR、AND NOT)将多个搜索词组合起来,以执行逻辑运算。 例如,可以使用 AND 查找既包含“latte”又包含“New York-style bagel”的行。 例如,可以使用 AND NOT 查找包含“bagel”但不包含“cream cheese”的行。

SELECT Description FROM Production.ProductDescription WHERE ProductDescriptionID <> 5 AND   CONTAINS(Description,aluminum AND spindle)

2.使用CONTAINStable谓词 CONTAINStable接受三个参数:

要搜索的表,要搜索的列和搜索的短语.

例:select * from containstable ( Titles,‘Cooking AND NOT Computer‘)

该例返回包含key和rank两列的表

freetexttable 语法:

freetexttable 是一个函数,用于在 Transact-sql SELECT 语句的 FROM 字句中对包含基于字符的数据类型的全文索引列执行 sql Server 全文搜索语法freetexttable(table_name,Column_name,Language)table_name 表名,需要全文搜索的表名Column_name 列名,可以有多个列名中间用逗号隔开Language 需要搜索的文字例如:freetexttable([GCP.Product].[ProductPublished],(name,Keywords),‘瑞士军刀‘)通过查询   SELECT * FROM  freetexttable([GCP.Product].[ProductPublished],‘瑞士军刀‘)

总结

以上是内存溢出为你收集整理的SQLServer 全文检索(full-text)语法全部内容,希望文章能够帮你解决SQLServer 全文检索(full-text)语法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1176416.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存