zoukankan      html  css  js  c++  java
  • 全文索引

    一:简要介绍下全文索引
    可以利用索引快速访问数据库表中的特定信息。索引是对数据库表中一个或多个列的值进行排序的结构。
    索引提供指针以指向存储在表中指定列的数据值,然后根据指定的排序次序排列这些指针。
    数据库使用索引的方式与使用书的目录很相似:通过搜索索引找到特定的值,然后跟随指针到达包含该值的行

    二:全文索引的相关操作
    1.确认全文索引是否开启
    对于SQL2005每个创建的数据库全文索引特性默认是开启的
    可以通过这个语句来确认它是否开启了

    SELECT databasePropertyex('xland','isfulltextenabled')
    返回0为未开启,返回1为已开启
    2.激活和禁止全文索引
    禁用全文索引一定要注意,已经存在的全文目录,数据表同该目录的任何关联信息都会被删除
    exec sp_fulltext_database @action = 'disable'
    'enable'为激活
    3.创建全文索引
    use xland 
    go
    create fulltext index on dbo.mytable --在某个表上创建全文索引
    (title language English)  --对某个列使用全文索引
    key index Pk_mytable --索引名(一般就是表名前面加Pk)
    on maincatalog
    with change_tracking off--关闭跟踪特性
    no population --不进行初始化填充
    其中Eglish可改为简体中文
    可通过
    select name alias from master..syslanguages
    查询系统中支持的语言
    修改和删除全文索引
    drop fulltext index on dbo.mytable

    三.全文目录的相关操作
    1.创建全文目录
    创建全文目录的时候,全文索引一定要为enable状态
    全文目录存放的路径一定要有效
    use xland
    go
    exec sp_fulltext_database @action = 'enable'
    go
    create fulltext catalog maincatalog
    in path 'c:\fulltext'
    更改和删除分别是alter和drop
    drop fulltext catalog maincatalog
    与其他的没有太多区别
    2.填充全文目录
    这是个后台的过程,表大的话虽然提示成功了,但是后台还在填充
    alter fulltext index on dbo.mytable
    start 
    full population

    use xland
    go
    exec sp_fulltext_table @tabname = 'dbo.mytable',
    @action = 'start_full'
    3.查看结果
    select title from mytable where contains(title,'全文')

    四:全文查询语法
    1.contains:精确的匹配
    where contains(*,' "my name is" ') --对短语的精确匹配,注意要有双引号
    where contains(*,' "my" or "name is" ') --或者的关系
    还有'and not'  'and'   
    还有临近词和权重  我就不多说了
    2.freetext:模糊匹配(你输入swim可以匹配出swam)与contains语法相同
    3.containstable
    此函数返回一个表
    此表包含两个列
    一个是key(就是主健啦)  一个是rank(返回的行与搜索结果的匹配程度,越大越精确)
    select  title from mytable p 
    join containstable(mytable, title , 'xland') ct
    on p.id  = ct.[key] 
    4.freetexttable与containstable类似


    附件:使用旧式语法创建全文索引的例子
    use xland
    go
    --检查数据库pubs是否支持全文索引,如果不支持 
    --
    则使用sp_fulltext_database 打开该功能 
    if(select databaseproperty('xland','isfulltextenabled'))=0 
    execute sp_fulltext_database 'enable' 
    --建立全文目录FT_xland 
    execute sp_fulltext_catalog 'FT_xland','create'
    --为mytable表建立全文索引数据元 
    execute sp_fulltext_table 'mytable','create','FT_xland','PK_mytable'--最后一个是主键名 
    --
    设置全文索引列名 
    execute sp_fulltext_column 'mytable','title','add' 
    --建立全文索引 
    --
    activate,是激活表的全文检索能力,也就是在全文目录中注册该表 
    execute sp_fulltext_table 'mytable','activate' 
    --填充全文索引目录 
    execute sp_fulltext_catalog 'FT_xland','start_full' 
    go 
    --检查全文目录填充情况 
    While fulltextcatalogproperty('FT_xland','populateStatus')<>0 
    begin 
    --如果全文目录正处于填充状态,则等待30秒后再检测一次 
    waitfor delay '0:0:30' 
    end 
    --全文目录填充完成后,即可使用全文目录检索 
    select * from mytable where CONTAINS(title,'xland'
  • 相关阅读:
    程序员偷偷深爱的9个不良编程习惯
    JQuery实现放大镜
    ACM1995
    liubo.im
    Linux中的一些点
    EPOLL使用详解
    Elays'Blog
    c#数据库解析
    codeforces #332 div 2 D. Spongebob and Squares
    类型
  • 原文地址:https://www.cnblogs.com/liulun/p/1368655.html
Copyright © 2011-2022 走看看