zoukankan      html  css  js  c++  java
  • sqlserver如何添加全文索引

    在SQL Server 中提供了一种名为全文索引的技术,可以大大提高从长字符串里搜索数
    据的速度,不用在用LIKE这样低效率的模糊查询了。
     
    下面简明的介绍如何使用Sql2008 全文索引

    一、检查服务里面带有Full-text字样的服务是否存在并开启


    如果不存在带有Full-text字样的服务的,确认是否安装了sqlserverFullTextSearch
     
     

    --检查数据库PS2是否支持全文索引,如果不支持
    --则使用sp_fulltext_database 打开该功能

    if(select databaseproperty('PS2','isfulltextenabled'))=0
    execute sp_fulltext_database 'enable'

    二、新建全文目录

    全文目录是用来存储全文索引的

    三、为表定义全文索引

    四、点击下一步,按提示选择

    1.确认下一步

    2.选择唯一索引,通常是主键

    3.选择要建立的全文索引列,对于断字符的选择如果列存的是中文就选择chinese,如果是英文就选择English

    4.选择索引更新方式,可以先自动更新,以后数据量大了可以设置添加全文索引的计划

    5.选择全文目录

    五、全文索引的SQL查询关键字

    建立好全文索引后就可以使用SQL语句来查询了,主要用带三个关键字 CONTAINS、FREETEXT、CONTAINSTABLE和FREETEXTTABLE

    1. CONTAINS 

    搜索单个词和短语的精确或模糊的匹配项,要搜索的内容必须是个有意义的词语,比如说“苹果”、“建设厅”,不能是一些没意义的词语,比如“阿迪撒啊是”,“儿儿的”这样的词语即使
    LIKE是能查询出来,但全文索引对这样没意义的词语可能没有建立索引,查不出来
    1. SELECT *   
    2. FROM dbo.Business  
    3. WHERE CONTAINS(Address,'旅游')  
    实现功能:查询Business表中Address列包含“旅游”的行

    2. FREETEXT

    和CONTAINS类似,不同的是它会先把要查询的词语先进性分词然后在查询匹配项
    1. 01.select *    
    2. 02.from dbo.Business     
    3. 03.where freetext(Address,'带婴儿旅游')  

    3.CONTAINSTABLE

    在查询方式上与 CONTAINS 几乎一样。但CONTAINSTABLE 返回的是符合查询条件的表,在 SQL 语句中我们可以把它当作一个普通的表来使用,并且使用 CONTAINSTABLE 的查询对每一行返回一个相关性排名值 (RANK) 和全文键 (KEY)。
    1. SELECT  *  
    2. FROM    Business AS FT_TBL  
    3.         INNER JOIN CONTAINSTABLE(Business, *, 'ISABOUT (婴儿 WEIGHT (.8),赤水 WEIGHT (.4) )')  
    4.         AS KEY_TBL ON FT_TBL.BusinessId = KEY_TBL.[KEY]  
    5. ORDER BY KEY_TBL.RANK DESC  
    ISABOUT 是这种查询的关键字,weight 指定了一个介于 0~1之间的数,类似系数。表示不同条件有不同的侧重。
    CONTAINSTABLE 返回的表包含有特殊的两列:KEY,RANK。
    被全文索引的表必须有唯一索引。这个唯一的索引列在返回的表中就成为 KEY。我们通常把它作为表连接的条件。
    在某些网站搜索时,结果中会出现表示匹配程度的数字,RANK 与此类似。它的值在0~1000之间,标识每一行与查询条件的匹配程度,程度越高,RANK 的值大,通常情况下,按照 RANK 的降序排列。

    4. FREETEXTTABLE

    在查询方式上与 FREETEXT 几乎一样。但 FREETEXTTABLE 返回的是符合查询条件的表,在 SQL 语句中我们可以把它当作一个普通的表来使用,并且使用  FREETEXT  的查询对每一行返回一个相关性排名值 (RANK) 和全文键 (KEY)。
    1. SELECT  * ,  
    2.         BusinessID ,  
    3.         Address  
    4. FROM    Business AS FT_TBL  
    5.         INNER JOIN FREETEXTTABLE(Business, Address, 'ISABOUT (带婴儿旅游 WEIGHT (.8),赤水 WEIGHT (.4) )')  
    6.         AS KEY_TBL ON FT_TBL.BusinessId = KEY_TBL.[KEY]  
    7. ORDER BY KEY_TBL.RANK DESC  
     
     
     

    --activate,是激活表的全文检索能力,也就是在全文目录中注册该表

    execute sp_fulltext_table 'ProSearch','activate'

    --填充全文索引目录

    execute sp_fulltext_catalog 'ProSearchCatalog','start_full'

    --查询全文索引是否建立完毕(0:完毕;1:正在建立)

    select fulltextcatalogproperty('ProSearchCatalog','populateStatus')

    三、介绍一下全文索引的一些相关操作
    查看全文检索的配置情况:

    sp_help_fulltext_catalogs -- 检查数据库有哪些全文目录
    sp_help_fulltext_tables ProSearchCatalog -- 查看哪些表把全文索引建立在T_testData下
    sp_help_fulltext_columns ProSearch -- 查看test表哪些字段配置了全文索引


    删除全文索引必须与创建的时候倒过来一步一步操作:

    drop fulltext index on test -- 撤销test上的全文检索
    drop fulltext catalog FT_testData -- 撤销全文目录FT_testData
      详细介绍请查看全文https://cnblogs.com/qianzf/
      原文博客的链接地址:https://cnblogs.com/qzf/
     
  • 相关阅读:
    ZOJ 1002 Fire Net (火力网)
    UVa OJ 117 The Postal Worker Rings Once (让邮差只走一圈)
    UVa OJ 118 Mutant Flatworld Explorers (变体扁平世界探索器)
    UVa OJ 103 Stacking Boxes (嵌套盒子)
    UVa OJ 110 MetaLoopless Sorts (无循环元排序)
    第一次遇到使用NSNull的场景
    NSURL使用浅析
    从CNTV下载《小小智慧树》
    NSDictionary and NSMutableDictionary
    Category in static library
  • 原文地址:https://www.cnblogs.com/qianzf/p/7131741.html
Copyright © 2011-2022 走看看