SQL Server的全文搜索功能

2022-05-21 14:17:55
目录
一、使用SQL Server全文搜索配置1、开启全文搜索服务:2、开启数据库的全文索引功能:3、创建全文索引目录:4、创建唯一索引:5、创建全文索引:二、使用全文搜索CONTAINS搜索方式1.简单词搜索2.前缀词搜索的方式3.加权词搜索的方式4.邻近词搜索的方式FREETEXT搜索方式CONTAINSTABLE搜索方式1、CONTAINSTABLE基本搜索:2、CONTAINSTABLE返回所需列:3、CONSTAINSTABLE按符合条件排序4、CONSTAINSTABLE按按权值排序使用FREETEXTTABLE搜索搜索image字段三、小结与评价

一、使用SQL>

要使用SQL Server的全文搜索服务,需要进行如下配置。

1、开启全文搜索服务:

2、开启数据库的全文索引功能:

--开启数据库的全文搜索功能
EXEC sp_fulltext_database 'enable';

3、创建全文索引目录:

--创建全文索引目录
CREATE FULLTEXT CATALOG IndexCatalog
     ON FILEGROUP [PRIMARY]
     IN PATH 'E:SQLServerIndex'
     AS DEFAULT

4、创建唯一索引:

--创建唯一索引
CREATE UNIQUE NONCLUSTERED INDEX IndexContent ON Article(ArticleContent ASC)

5、创建全文索引:

--创建全文索引
CREATE FULLTEXT INDEX ON Article
  (ArticleContent)
  KEY INDEX IndexContent ON IndexCatalog    --IndexContent是唯一索引名

二、使用全文搜索

CONTAINS搜索方式

1.简单词搜索

->

--搜索文章内容含有张三或者李四的记录
  SELECT * FROM Article WHERE CONTAINS(ArticleContent,'"张三" OR "李四"')

2.前缀词搜索的方式

->

--搜索文章内容中含有以'认'开始的词的记录
  SELECT * FROM Article WHERE CONTAINS(ArticleContent,'"认*"')    --认为,认识

3.加权词搜索的方式

->

--在CONTAINS搜索中,权重并不影响排序
  SELECT * FROM Article
  WHERE CONTAINS(ArticleContent,'ISABOUT ("北京" weight(0.9),"上海"  weight(0.6),"广州"  weight(0.5))')

4.邻近词搜索的方式

->

--搜索文章内容中第二个词在第一个词附近的记录
  SELECT * FROM Article WHERE CONTAINS(ArticleContent,'"张三" NEAR "李四"')

FREETEXT搜索方式

FREETEXT搜索方式与CONTAINS搜索方式相比,其搜索结果表现都十分不精确,因为FREETEXT的搜索方式是将一个句子中的每个单字拆分开进行搜索的。使用CONTAINS搜索方式搜索条件为“教育部”的记录,那么搜索出来的将是记录里包含“教育部”三个字符串的记录。

--搜索文章内容中包含'程'字和'社'字的记录
  SELECT * FROM Article WHERE FREETEXT(ArticleContent,'程社')

CONTAINSTABLE搜索方式

1、CONTAINSTABLE基本搜索:

--CONTAINSTABLE搜索文章内容中含有友谊的记录
  SELECT * FROM CONTAINSTABLE(Article,ArticleContent,'友谊') as table1

留意到返回中指包含了两个字段:

其实就是CONTAINSTABLE表中的数据。

2、CONTAINSTABLE返回所需列:

--CONTAINSTABLE搜索返回所需列
  SELECT * FROM Article JOIN
    CONTAINSTABLE(Article,ArticleContent,'"环境"',2) as table1
    ON Article.ArticleContent = table1.[KEY]
  ORDER BY table1.RANK DESC

3、CONSTAINSTABLE按符合条件排序

--按符合条件排序
  SELECT * FROM Article JOIN
      CONTAINSTABLE(Article,ArticleContent,' "泰国" NEAR "高铁" ',10) as table1
      ON Article.ArticleContent = table1.[KEY]
   ORDER BY table1.RANK DESC

看到查询结果的确按符合条件进行了排序:

4、CONSTAINSTABLE按按权值排序

--权重值排序
  SELECT * FROM Article JOIN
  CONTAINSTABLE(Article,ArticleContent,
  'ISABOUT ("泰国" weight(0.9),
  "高铁"  weight(0.6),
  "环境"  weight(0.1))') AS TABLE1
  ON Article.ArticleContent = TABLE1.[KEY]
  ORDER BY TABLE1.RANK DESC

结果按照权重值排序:

使用FREETEXTTABLE搜索

单个字搜索,但是多了参数可供使用:语法如下:

FREETEXTTABLE (table , { column_name | (column_list) | * }
  , 'freetext_string'
  [ ,LANGUAGE language_term ]
  [ ,top_n_by_rank ] )

示例:

搜索image字段

在SQL>

SQL Server 2005支持对存储在image中的纯文本文件、网页文件、Word文件、Excel文件和PowerPoint文件的内容进行查询,其扩展名字段必须分别为txt、htm、doc、xls和ppt。全文索引创建完毕后,对image字段里的文件内容进行查询的方法与其他字段的查询方法是一样的:

SELECT 编号,标题,文件,扩展名 FROM 文章 WHERE CONTAINS(文件,'数据库')

三、小结与评价

下面给出这个SQL>

--开启数据库的全文搜索功能:
EXEC sp_fulltext_database 'enable'; --数据库启用全文索引
--关闭数据库的全文搜索功能:
EXEC sp_fulltext_database 'disable'; --数据库禁用全文索引


--如果你忘记了全文索引的目录、表、列创建过全文索引
EXEC sp_help_fulltext_catalogs    --全文索引目录
EXEC sp_help_fulltext_columns    --全文索引列
EXEC sp_help_fulltext_tables    --全文索引表

到此这篇关于SQL Server全文搜索的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持易采站长站。

相关文章 大家在看