zoukankan      html  css  js  c++  java
  • 全文索引技术是目前搜索引擎的关键技术

    全文索引技术是目前搜索引擎的关键技术。
      试想在1M大小的文件中搜索一个词,可能需要几秒,在100M的文件中可能需要几十秒,如果在更大的文件中搜索那么就需要更大的系统开销,这样的开销是不现实的。
      所以在这样的矛盾下出现了全文索引技术,有时候有人叫倒排文档技术。
      原理是先定义一个词库,然后在文章中查找每个词条(term)出现的频率和位置,把这样的频率和位置信息按照词库的顺序归纳,这样就相当于对文件建立了一个以词库为目录的索引,这样查找某个词的时候就能很快的定位到该词出现的位置。
      问题在处理英文文档的时候显然这样的方式是非常好的,因为英文自然的被空格分成若干词,只要我们有足够大的词汇库就能很好的处理。但是亚洲文字因为没有空格作为断词标志,所以就很难判断一个词,而且人们使用的词汇在不断的变化,而维护一个可扩展的词汇库的成本是很高的,所以问题出现了。
      解决出现这样的问题使“分词”成为全文索引的关键技术。目前有两中基本的方法:
      二元法 它把所有有可能的每两两汉字的组合看为一个词组,这样就没有维护词库的开销。
      词库法 它使使用词库中的词作为切分的标准,这样也出现了词库跟不上词汇发展的问题,除非你维护词库。
      实际上现在很多著名的搜索引擎都使用了多种分词的办法,比如“正向最大匹配”+“逆向最大匹配”,基于统计学的新词识别,自动维护词库等技术,但是显然这样的技术还没有作到完美。
      目前全文索引技术正走向人工智能化,也是发展的方向。

    ===============================

    SQL SERVER数据库全文索引的示例,以pubs数据库为例。
    首先,介绍利用系统存储过程创建全文索引的具体步骤:
    1) 启动数据库的全文处理功能 (sp_fulltext_database)
    2) 建立全文目录 (sp_fulltext_catalog)
    3) 在全文目录中注册需要全文索引的表 (sp_fulltext_table)
    4) 指出表中需要全文索引的列名 (sp_fulltext_column)
    5) 为表创建全文索引 (sp_fulltext_table)
    6) 填充全文目录 (sp_fulltext_catalog)
    ---------********示例********-------------
    以对pubs数据库的title和notes列建立全文索引,之后使用索引查询title列或notes列中包含有datebase 或computer字符串的图书名称:
    在这之前,需要安装Microsoft Search服务,启动SQL server全文搜索服务
    user pubs --打开数据库
    go
    --检查数据库pubs是否支持全文索引,如果不支持
    --则使用sp_fulltext_database 打开该功能
    if(select databaseproperty('pubs','isfulltextenabled'))=0
    execute sp_fulltext_database 'enable'
    --建立全文目录FT_PUBS
    execute sp_fulltext_catalog 'FT_pubs','create'
    --为title表建立全文索引数据元
    execute sp_fulltext_table 'title','create','FT_pubs','UPKCL_titleidind'
    --设置全文索引列名
    execute sp_fulltext_column 'title','title','add'
    execute sp_fulltext_column 'title','notes','add'
    --建立全文索引
    --activate,是激活表的全文检索能力,也就是在全文目录中注册该表
    execute sp_fulltext_table 'title','activate'
    --填充全文索引目录
    execute sp_fulltext_catalog 'FT_pubs','start_full'
    go
    --检查全文目录填充情况
    While fulltextcatalogproperty('FT_pubs','populateStatus')<>0
    begin
    --如果全文目录正处于填充状态,则等待30秒后再检测一次
    waitfor delay '0:0:30'
    end
    --全文目录填充完成后,即可使用全文目录检索
    select title
    form
    where CONTAINS(title,'database')
    or CONTAINS(title,'computer')
    or CONTAINS(notes,'database')
    or CONTAINS(notes,'database')
     
    '--------------以下介绍一下全文操作类的系统存储过程
    过程名称:sp_fulltext_service
    执行权限:serveradmin或系统管理员
    作 用:设置全文搜索属性
    过程名称:sp_fulltext_catalog
    执行权限:db_owner及更高角色成员
    作 用:创建和删除一个全文目录,启动或停止一个全文目录的索引操作
    过程名称:sp_fulltext_database
    执行权限:db_owner角色成员
    作 用:初始化全文索引或删除数据库中所有全文目录
    过程名称:sp_fulltext_table
    执行权限:db_ddladnmin或db_owner角色成员
    作 用:将一个表标识为全文索引表或非全文索引表
    过程名称:sp_fulltext_column
    执行权限:db_ddladnmin角色成员
    作 用:指出一个全文索引表中的那些列假如或退出全文索引
  • 相关阅读:
    .NET实现Excel文件的读写 未测试
    权限管理设计
    struts1中配置应用
    POJ 2139 Six Degrees of Cowvin Bacon(floyd)
    POJ 1751 Highways
    POJ 1698 Alice's Chance
    POJ 1018 Communication System
    POJ 1050 To the Max
    POJ 1002 4873279
    POJ 3084 Panic Room
  • 原文地址:https://www.cnblogs.com/moss_tan_jun/p/1730121.html
Copyright © 2011-2022 走看看