全文检索(一)

转载 2007年09月25日 15:30:00
  全文索引的介绍

全文索引与普通的索引不同,普通的索引是以B-tree结构来维护的,而全文索引是一种特殊类型的基于标记的功能性索引,是由Microsoft SQL Server全文引擎服务创建和维护的。

使用全文索引可以快速、灵活地为存储在SQL Server数据库中的文本数据创建基于关键字查询的索引,与like语句不同,like语句的搜索是适用于字符模式的查询,而全文索引是根据特定语言的规则对词和短语的搜索,是针对语言的搜索。

在对大量的文本数据进行查询时,全文索引可以大大地提高查询的性能,如对于几百万条记录的文本数据进行like查询可能要花几分钟才能返回结果,而使用全文索引则只要几秒钟甚至更少的时间就可以返回结果了。

全文索引中常用的术语

由于全文索引中使用了较多的新的术语,在此先介绍这些术语:

全文索引:一种特殊的索引,能在给定的列中存储有关重要的词及位置的信息,使用这些信息可以快速进行全文查询,搜索包括特定词或词组的行。

全文索引的体系结构

SQL Server的全文索引是由SQL Server FullText Search服务来维护的,该服务可以在Windows操作系统的【管理工具】à【服务】里找到,如图1所示,在此可以启动、停止、暂停、恢复和重新启动该服务。只有SQL Server FullText Search服务在启动状态时,才能使用全文索引。

1 SQL Server FullText Search服务

SQL Server FullText Search服务由两个部分组件支持:一个是Microsoft Full-Text Engine for SQL ServerMSFTESQL),也就是SQL Server全文搜索引擎;另一个是Microsoft Full-Text Engine Filter DeamonMSFTEFD),也就是全文搜索引擎过滤器。

Microsoft Full-Text Engine for SQL Server的作用是填充全文索引、管理全文索引和全文目录、帮助对SQL Server数据库中的数据表进行全文搜索。Microsoft Full-Text Engine Filter Deamon包含筛选器、协议处理程序和断字符三个组件,其作用是负责从数据表中访问和筛选数据以及进行断字和词干分析。其中,筛选器的作用是从文档中提取文本信息,并将非文本信息和格式化信息(如换行符、字体大小等信息)删除,然后生成文本字符串和属性的对应,并将它们传递给索引引擎;协议处理程序用于从指定数据库中的表内访问数据;断字符用于在查询或抓取的文档中确定字符边界位置。

全文索引组件负责对全文索引的初始填充以及当全文索引表中的数据被修改时的更新。当全文填充(爬网)开始后,数据库引擎会将大量的数据存储到内存里,并通知Microsoft Full-Text Engine for SQL ServerMSFTESQL)开始进行索引。当MSFTESQL服务接到进行索引的通知后,使用协议处理程序组件从内存中取得数据进行处理后生成全文索引。MSFTESQL服务会将数据表中的某一列或几列中的字符和二进制数据编制成索引。在对varbinary(max)image列中的数据编制索引时,筛选器会将基于为该数据指定的文件格式来提取文本。在处理索引的过程中MSFTESQL服务通过断字符来将收集到的文本数据分隔成各个单独的标记或关键字。这个过程就是全文索引的过程。

由于全文索引与普通的索引不同,全文索引并不是存储在数据表中,而是存储在全文目录中,所以在使用全文索引来搜索数据时,其运行的流程和普通索引也不一样。

如图2所示,当SQL Server发出全文搜索的请求后,会将搜索的条件传递给全文搜索引擎过滤器,经过MSFTEFD处理后,将数据提供给MSFTESQL,再由MSFTESQL从全文目录中找到符合要求的数据,再返回给SQL Server进行后续操作。这就是进行全文搜索的过程。

2 全文搜索流程

 

全文目录:全文目录是存储全文索引的地方,全文目录必须驻留在与SQL Server实例相关联的本地硬盘上,每个全文目录可用于满足数据库内的一个或多个表的索引需求。

 全文索引的体系结构

SQL Server的全文索引是由SQL Server FullText Search服务来维护的,该服务可以在Windows操作系统的【管理工具】à【服务】里找到,如图14.1所示,在此可以启动、停止、暂停、恢复和重新启动该服务。只有SQL Server FullText Search服务在启动状态时,才能使用全文索引。

1 SQL Server FullText Search服务

SQL Server FullText Search服务由两个部分组件支持:一个是Microsoft Full-Text Engine for SQL ServerMSFTESQL),也就是SQL Server全文搜索引擎;另一个是Microsoft Full-Text Engine Filter DeamonMSFTEFD),也就是全文搜索引擎过滤器。

Microsoft Full-Text Engine for SQL Server的作用是填充全文索引、管理全文索引和全文目录、帮助对SQL Server数据库中的数据表进行全文搜索。Microsoft Full-Text Engine Filter Deamon包含筛选器、协议处理程序和断字符三个组件,其作用是负责从数据表中访问和筛选数据以及进行断字和词干分析。其中,筛选器的作用是从文档中提取文本信息,并将非文本信息和格式化信息(如换行符、字体大小等信息)删除,然后生成文本字符串和属性的对应,并将它们传递给索引引擎;协议处理程序用于从指定数据库中的表内访问数据;断字符用于在查询或抓取的文档中确定字符边界位置。

全文索引组件负责对全文索引的初始填充以及当全文索引表中的数据被修改时的更新。当全文填充(爬网)开始后,数据库引擎会将大量的数据存储到内存里,并通知Microsoft Full-Text Engine for SQL ServerMSFTESQL)开始进行索引。当MSFTESQL服务接到进行索引的通知后,使用协议处理程序组件从内存中取得数据进行处理后生成全文索引。MSFTESQL服务会将数据表中的某一列或几列中的字符和二进制数据编制成索引。在对varbinary(max)image列中的数据编制索引时,筛选器会将基于为该数据指定的文件格式来提取文本。在处理索引的过程中MSFTESQL服务通过断字符来将收集到的文本数据分隔成各个单独的标记或关键字。这个过程就是全文索引的过程。

由于全文索引与普通的索引不同,全文索引并不是存储在数据表中,而是存储在全文目录中,所以在使用全文索引来搜索数据时,其运行的流程和普通索引也不一样。

SSM(二)Lucene全文检索

前言 大家平时肯定都有用过全文检索工具,最常用的百度谷歌就是其中的典型。如果自己能够做一个那是不是想想就逼格满满呢。Apache就为我们提供了这样一个框架,以下就是在实际开发中加入Lucene的一...
  • qq_18661793
  • qq_18661793
  • 2016年07月08日 14:31
  • 2687

全文检索框架Lucene——原理

一、总论 根据http://lucene.apache.org/java/docs/index.html 定义: Lucene 是一个高效的,基于Java 的全文检索库。 所以在了解Lucene...
  • u013573133
  • u013573133
  • 2015年09月06日 16:26
  • 3287

[Java Web]Java的全文搜索类库 Lucene

Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引...
  • sinat_19425927
  • sinat_19425927
  • 2015年01月30日 17:03
  • 1168

全文检索原理及实现方式

一、总论 根据http://lucene.apache.org/java/docs/index.html 定义: "Apache Lucene(TM) is a high-performa...
  • qq_16162981
  • qq_16162981
  • 2017年04月12日 14:03
  • 928

SQLite的全文检索

如果需要在其中做全文检索的话,也是可以的。因为sqlite中支持fts表 这里的FTS3其实是sqlite的一个扩展模块,是虚拟表模块,允许用户去实现全文检索。 下面是一个简单的例子: crea...
  • zhuqiang1002
  • zhuqiang1002
  • 2012年03月29日 14:22
  • 2867

Cloudera Search: 轻松实现Hadoop全文检索

近期Cloudera Search的推出,对于曾经做信息检索和使用过Lucene/Solr的我来讲,虽然不是那种令人乍舌的新技术,但从应用层面来考虑,我相信,对于业界而言,毫无疑问是一个相当令人兴奋的...
  • hadoop17173
  • hadoop17173
  • 2013年12月08日 22:51
  • 1177

全文检索的基本概念和原理

全文检索的基本概念和原理--觉先前辈的博客《Lucene3.0原理与代码分析》读书笔记...
  • MONKEY_D_MENG
  • MONKEY_D_MENG
  • 2010年12月08日 21:39
  • 3014

比较全文索引和传统的模糊查询的性能

--查看表数据的内容和分布 SQL> select count(*) from members;     COUNT(*) ----------     345567   SQL>...
  • lichangzai
  • lichangzai
  • 2013年01月06日 12:25
  • 3141

elasticsearch的实现全文检索

 转自:http://zhaoyanblog.com/archives/495.html            elasticsearch一个准实时的搜索引擎,基于lucene构建,它...
  • wilsonke
  • wilsonke
  • 2015年06月03日 08:43
  • 3501

全文检索技术—Solr

1、什么是Solr Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并...
  • lcx216
  • lcx216
  • 2017年01月15日 00:22
  • 539
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:全文检索(一)
举报原因:
原因补充:

(最多只允许输入30个字)