开发者

SQL Server的全文搜索功能

开发者 https://www.devze.com 2022-12-13 10:30 出处:网络 作者: springsnow
目录一、使用SQL Server全文搜索配置1、开启全文搜索服务:2、开启数据库的全文索引功能:3、创建全文索引目录:4、创建唯一索引:5、创建全文索引:二、使用全文搜索CONTAINS搜索方式1.简单词搜索2.前缀词搜索的方式
目录
  • 一、使用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 Server全文搜索配置

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

          1、开启全文搜索服务:

          SQL Server的全文搜索功能

          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.前缀词搜索的方式

          - 搜索指定文本开头的词或短语,前缀词的搜索方式主要是用在搜索英文中,例如搜索以“do”开头的单词,则可以将doctor、document、download等单词都搜索出来。

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

          3.加权词搜索的方式

          - 给多个搜索条件加上权值,加权值越高的记录排在越前面,当以多个字符串作为搜索条件搜索记录时,可以为不同的字符串加上一个加权值,这个加权值是介于0和1之间的数值,加权值越高的记录排在越前面。事实上在该SELECT语句的返回结果集里,并没有按加权值的大小来排序,因为WEIGHT不影响CONTAINS查询的结果,只会影响CONTAINSTABLE查询中的排序:

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

          4.邻近词搜索的方式

          - 可以搜索与另一个词或短语相邻近的词或短语:

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

          FREETEXT搜索方式

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

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

          CONTAINSTABLE搜索方式

          1、CONTAINSTABLE基本搜索:

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

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

          SQL Server的全文搜索功能

          其实就是CONTAINSTABLE表中的数据。

          2、CONTAINSTABLE返回所需列:

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

          SQL Server的全文搜索功能

          3、http://www.devze.comCONSTAINSTABLE按符合条件排序

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

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

          SQL Server的全文搜索功能

          4、CONSTAINSTABLE按按权值排序

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

          结果按照权重值排序:

          SQL Server的全文搜索功能

          使用FREETEXTTABLE搜索

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

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

          示例:

          SQL Server的全文搜索功能

          搜索image字段

          在SQL Server 2005的image类型的字段里,不仅仅是可以存储图形文件,还可以存储如可执行文件、音乐文件、文本文件等众多文件类型。SQL Server 2005支持对存储在image类型的字段里的一些文件的内容进行全文搜索,但在创建全文索引时必须指明存储在image字段里的文件的类型。

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

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

          三、小结与评价

          下面给出这个SQL Server全文搜索的常用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全文搜索的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

          0

          精彩评论

          暂无评论...
          验证码 换一张
          取 消

          关注公众号