• SQLServer全文索引


    -------------------------

    ----全文索引使用小例------

    分别使用SQL2000和SQL2005

    ------------------------

    使用场合:复杂化查询 文本数据存储在数据列中

    --环境

    use poofly

    go

    CREATE TABLE HELLO(ID INT NOT NULL PRIMARY KEY,HELLO NVARCHAR(50))

    ----SP_HELPINDEX HELLO(主键约束即唯一索引名PK__HELLO__3214EC271DE57479)

    ps:这里的唯一约束我们最好建立在4B大小的整数列上 一般自增列是不错的选择,这样可以减少文件系统的Mircosoft搜索服务的资源需求。

    GO

    INSERT HELLO SELECT 1,'TEST'

     

     

    1、要启用全文索引功能首先需要安装full text search全文索引服务

     

    2、启动full text search服务

     

    3、检查数据库全文索引是否开启,没有开启则使用sp_fulltext_database 打开该功能

    if(select databaseproperty('poofly','isfulltextenabled')) =0

    execute sp_fulltext_database 'enable'

     

    --以下是的建立全文索引小例子

    4、创建全文目录

    EXEC SP_FULLTEXT_CATALOG 'POOFLY','CREATE'

     

    5、注册HELLO表,建立全文索引数据元

    EXEC sp_fulltext_table 'HELLO','create','POOFLY','PK__HELLO__3214EC271DE57479'

     

    6、指定支持全文索引的列名

    EXEC sp_fulltext_column 'HELLO','HELLO','add'

     

    7、为表创建(激活)全文索引

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

    EXEC sp_fulltext_table 'HELLO','activate'

     

    8、启动对全文目录的完全填充

    --后期是使用更改跟踪或者增量填充维护索引

    --EXEC sp_fulltext_catalog 'POOFLY','strat_incremental' 

    EXEC sp_fulltext_catalog 'POOFLY','start_full'

     

    9、验证全文目录填充的进度

    select  fulltextcatalogproperty('POOFLY','populateStatus') 

    --为表示已经完成填充

     

    10、通过CONTAINS谓词进行全文索引

    select HELLO

    from HELLO

    where CONTAINS(*,'TEST')

    /*

    HELLO

    ---------------

    TEST*/

     

    11、删除全文索引元数据

    EXEC sp_fulltext_table 'HELLO','drop'

     

    12、删除全文目录

    EXEC sp_fulltext_catalog 'POOFLY','DROP'

     

    --------------华丽分割线-----------------------

    --以下是的建立全文索引的方法

    /*创建全文目录*/

    create FULLTEXT CATALOG POOFLY AS DEFAULT

    /*C创建全文索引*/

    create FULLTEXT INDEX ON HELLO(HELLO) key index PK__HELLO__3214EC271DE57479 ON  POOFLY

    /*通过CONTAINS谓词进行全文索引*/

    select HELLO

    from HELLO

    where CONTAINS(*,'TEST')

    /*删除全文索引*/

    DROP FULLTEXT INDEX on HELLO

    /*删除全文目录FT(含有全文索引时候不能删除)*/

    drop fulltext catalog POOFLY

     

     

     

    -----使用contains关键字进行全文索引----------------

    --1.前缀搜索

    select name from tb where contains(name,'"china*"')

    ps:注意这里的* 返回结果可能会是 chinax chinay chinaname china 

    /*返回前缀是china的name--如果不用“”隔开那么系统会都城contains(name,'china*') 与china* 匹配*/

     

    --2.使用派生词搜索

    Select name from tb where contains(name,'formsof(inflectional,"foot")')

    /* 出来结果可能是foot feet (所有动词不同形态名词单复数形式)*/

     

    --3.词加权搜索

    select value from tb where contains(value , 'ISABOUT(performance weight(.8))')

    /*全值用-1的一个数字表示表示每个词的重要程度*/

     

    --4.临近词搜素

    select * from tb where contains(document,'a near b')

    /* 出来的结果是“a”单词与“b”单词临近的document可以写成contains(document,'a ~ b')*/--

     

    --5.布尔逻辑搜素

    select * from tb where contains(name,'"a" and "b"')

    /*返回既包含A 又包含B单词的行当然这里的AND 关键字还有换成OR ,AND NOT 等*/

    ----------------------------------------------------

     

    你还可以使用RREETEXT 进行模糊搜索

    --任意输入文本全文索引自动识别重要单词然后构造一个查询

    select * from tb where freetext(wendang,'zhubajie chi xi gua !')

    --============================================================

    --对全文索引性能影响因素很多包括硬件资源方面还有SQL 自身性能和MSFTESQL服务的效率等方面

    --它的搜索性能有方面: 全文索引性能和全文查询性能

     

    ------------------------------------------------------------------------------------------------

    普通 SQL 索引 全文索引
    存储时受定义它们所在的数据库的控制。 存储在文件系统中,但通过数据库管理。
    每个表允许有若干个普通索引。 每个表只允许有一个全文索引。
    当对作为其基础的数据进行插入、更新或删除时,它们自动更新。 将数据添加到全文索引称为填充,全文索引可通过调度或特定请求来请求,也可以在添加新数据时自动发生。
    不分组。 在同一个数据库内分组为一个或多个全文目录。
    使用 SQL Server 企业管理器、向导或 Transact-SQL 语句创建和除去。 使用 SQL Server 企业管理器、向导或存储过程创建、管理
  • 相关阅读:
    JavaScript闭包
    模块模式——方法
    产品与技术
    读书笔记
    屌丝求职记
    正则表达式regex狂记
    css狂记
    html狂记
    Android狂记忆
    关于调式
  • 原文地址:https://www.cnblogs.com/javaleon/p/4019471.html
Copyright © 2020-2023  润新知