当前位置:文档之家› 全文检索原理

全文检索原理

全文检索原理
全文检索原理

全?文检索

我们?生活中的数据总体分为两种:结构化数据和?非结构化数据。

?结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据

等。

??非结构化数据:指不定长或?无固定格式的数据,如邮件,word?文档等。当然有的地?方还会提到第三种,半结构化数据,如XML,HTML等,当根据需要可按结构化数据来处理,也可抽取出纯?文本按?非结构化数据来处理。

?非结构化数据又?一种叫法叫全?文数据。

按照数据的分类,搜索也分为两种:

?对结构化数据的搜索:如对数据库的搜索,?用SQL语句。再如对元数据

的搜索,如利?用windows搜索对?文件名,类型,修改时间进?行搜索等。

?对?非结构化数据的搜索:如利?用windows的搜索也可以搜索?文件内容,Linux下的grep命令,再如?用Google和百度可以搜索?大量内容数据。

对?非结构化数据也即对全?文数据的搜索主要有两种?方法:

?一种是顺序扫描法(Serial Scanning):所谓顺序扫描,?比如要找内容包含某?一个字符串的?文件,就是?一个?文档?一个?文档的看,对于每?一个?文档,从头看到尾,如果此?文档包含此字符串,则此?文档为我们要找的?文件,接着看下?一个?文件,直到扫描完所有的?文件。如利?用windows的搜索也可以搜索?文件内容,只是相当的慢。如果你有?一个80G硬盘,如果想在上?面找到?一个内容包含某字符串的?文件,不花他?几个?小时,怕是做不到。Linux下的grep命令也是这?一种?方式。?大家可能觉得这种?方法?比较原始,但对于?小数据量的?文件,这种?方法还是最直接,最?方便的。但是对于?大量的?文件,这种?方法就很慢了。

有?人可能会说,对?非结构化数据顺序扫描很慢,对结构化数据的搜索却相对较快(由于结构化数据有?一定的结构可以采取?一定的搜索算法加快速度),那么把我们的?非结构化数据想办法弄得有?一定结构不就?行了吗?

这种想法很天然,却构成了全?文检索的基本思路,也即将?非结构化数据中的?一部分信息提取出来,重新组织,使其变得有?一定结构,然后对此有?一定结构的数据进?行搜索,从?而达到搜索相对较快的?目的。

这部分从?非结构化数据中提取出的然后重新组织的信息,我们称之索引。

这种说法?比较抽象,举?几个例?子就很容易明?白,?比如字典,字典的拼?音表和部?首检字表就相当于字典的索引,对每?一个字的解释是?非结构化的,如果字典没有?音节表和部?首检字表,在茫茫辞海中找?一个字只能顺序扫描。然?而字的某些信息可以提取出来进?行结构化处理,?比如读?音,就?比较结构化,分声母和韵母,分别只有?几种可以?一?一列举,于是将读?音拿出来按?一定的顺序排列,每?一项读?音都指向此字的详细解释的页数。我们搜索时按结构化的拼?音搜到读?音,然后按其指向的页数,便可找到我们的?非结构化数据——也即对字的解释。

这种先建?立索引,再对索引进?行搜索的过程就叫全?文检索(Full-text Search)。下?面这幅图描述了全?文检索的?一般过程。

全?文检索?大体分两个过程,索引创建(Indexing)和搜索索引(Search)。

?索引创建:将现实世界中所有的结构化和?非结构化数据提取信息,创建索引的过程。

?搜索索引:就是得到?用户的查询请求,搜索创建的索引,然后返回结果的过程。

于是全?文检索就存在三个重要问题:

1. 索引?里?面究竟存些什么?(Index)

2. 如何创建索引?(Indexing)

3. 如何对索引进?行搜索?(Search)

下?面我们顺序对每个个问题进?行研究。

?二、索引?里?面究竟存些什么

索引?里?面究竟需要存些什么呢?

?首先我们来看为什么顺序扫描的速度慢:

其实是由于我们想要搜索的信息和?非结构化数据中所存储的信息不?一致造成的。

?非结构化数据中所存储的信息是每个?文件包含哪些字符串,也即已知?文件,欲求字符串相对容易,也即是从?文件到字符串的映射。?而我们想搜索的信息是哪些?文件包含此字符串,也即已知字符串,欲求?文件,也即从字符串到?文件的映射。两者恰恰相反。于是如果索引总能够保存从字符串到?文件的映射,则会?大?大提?高搜索速度。

由于从字符串到?文件的映射是?文件到字符串映射的反向过程,于是保存这种信息的索引称为反向索引。

反向索引的所保存的信息?一般如下:

假设我的?文档集合?里?面有100篇?文档,为了?方便表?示,我们为?文档编号从1到100,得到下?面的结构

左边保存的是?一系列字符串,称为词典。

每个字符串都指向包含此字符串的?文档(Document)链表,此?文档链表称为倒排表(Posting List)。

有了索引,便使保存的信息和要搜索的信息?一致,可以?大?大加快搜索的速度。?比如说,我们要寻找既包含字符串“lucene”又包含字符串“solr”的?文档,我们只需要以下?几步:

1. 取出包含字符串“lucene”的?文档链表。

2. 取出包含字符串“solr”的?文档链表。

3. 通过合并链表,找出既包含“lucene”又包含“solr”的?文件。

看到这个地?方,有?人可能会说,全?文检索的确加快了搜索的速度,但是多了索引的过程,两者加起来不?一定?比顺序扫描快多少。的确,加上索引的过程,全?文检索不?一定?比顺序扫描快,尤其是在数据量?小的时候更是如此。?而对?一个很?大量的数据创建索引也是?一个很慢的过程。

然?而两者还是有区别的,顺序扫描是每次都要扫描,?而创建索引的过程仅仅需要?一次,以后便是?一劳永逸的了,每次搜索,创建索引的过程不必经过,仅仅搜索创建好的索引就可以了。

这也是全?文搜索相对于顺序扫描的优势之?一:?一次索引,多次使?用。

三、如何创建索引

全?文检索的索引创建过程?一般有以下?几步:

第?一步:?一些要索引的原?文档(Document)。

为了?方便说明索引创建过程,这?里特意?用两个?文件为例:

?文件?一:Students should be allowed to go out with their friends, but not allowed to drink beer.

?文件?二:My friend Jerry went to school to see his students but found them drunk which is not allowed.

第?二步:将原?文档传给分次组件(Tokenizer)。

分词组件(Tokenizer)会做以下?几件事情(此过程称为Tokenize):

1. 将?文档分成?一个?一个单独的单词。

2. 去除标点符号。

3. 去除停词(Stop word)。

所谓停词(Stop word)就是?一种语?言中最普通的?一些单词,由于没有特别的意义,因?而?大多数情况下不能成为搜索的关键词,因?而创建索引时,这种词会被去掉?而减少索引的?大?小。

英语中挺词(Stop word)如:“the”,“a”,“this”等。

对于每?一种语?言的分词组件(Tokenizer),都有?一个停词(stop word)集合。

经过分词(Tokenizer)后得到的结果称为词元(Token)。

在我们的例?子中,便得到以下词元(Token):

“Students”,“allowed”,“go”,“their”,“friends”,“allowed”,“drink”,“beer”,“My”,“friend”,“Jerry”,“went”,“school”,“see”,“his”,“students”,“found”,“them”,“drunk”,“allowed”。

第三步:将得到的词元(Token)传给语?言处理组件(Linguistic Processor)。

语?言处理组件(linguistic processor)主要是对得到的词元(Token)做?一些同语?言相关的处理。

对于英语,语?言处理组件(Linguistic Processor)?一般做以下?几点:

1. 变为?小写(Lowercase)。

2. 将单词缩减为词根形式,如“cars”到“car”等。这种操作称为:stemming。

3. 将单词转变为词根形式,如“drove”到“drive”等。这种操作称为:lemmatization。

Stemming 和 lemmatization的异同:

?相同之处:Stemming和lemmatization都要使词汇成为词根形式。

?两者的?方式不同:

o Stemming采?用的是“缩减”的?方

式:“cars”到“car”,“driving”到“drive”。

o Lemmatization采?用的是“转变”的?方

式:“drove”到“drove”,“driving”到“drive”。

?两者的算法不同:

o Stemming主要是采取某种固定的算法来做这种缩减,如去除“s”,

去除“ing”加“e”,将“ational”变为“ate”,将“tional”变为“tion”。

o Lemmatization主要是采?用保存某种字典的?方式做这种转变。?比如

字典中有“driving”到“drive”,“drove”到“drive”,“am, is,

are”到“be”的映射,做转变时,只要查字典就可以了。

?Stemming和lemmatization不是互斥关系,是有交集的,有的词利?用这两种?方式都能达到相同的转换。

语?言处理组件(linguistic processor)的结果称为词(Term)。

在我们的例?子中,经过语?言处理,得到的词(Term)如下:

“student”,“allow”,“go”,“their”,“friend”,“allow”,“drink”,“beer”,“my”,“friend”,“jerry”,“go”,“school”,“see”,“his”,“student”,“?nd”,“them”,“drink”,“allow”。

也正是因为有语?言处理的步骤,才能使搜索drove,?而drive也能被搜索出来。

第四步:将得到的词(Term)传给索引组件(Indexer)。

索引组件(Indexer)主要做以下?几件事情:

1. 利?用得到的词(Term)创建?一个字典。

在我们的例?子中字典如下:

Term Document ID

student1

allow1

go1

their1

friend1

allow1

drink1

beer1

my2

friend2

jerry2

go2

school2

see2

his2

student2

?nd2

them2

drink2

allow2

2. 对字典按字母顺序进?行排序。

Term Document ID

allow1

allow1

allow2

beer1

drink1

drink2

?nd2

friend1

friend2

go1

go2

his2

jerry2

my2

school2

see2

student1

student2

their1

them2

3. 合并相同的词(Term)成为?文档倒排(Posting List)链表。

在此表中,有?几个定义:

?Document Frequency 即?文档频次,表?示总共有多少?文件包含此词(Term)。

?Frequency 即词频率,表?示此?文件中包含了?几个此词(Term)。

所以对词(Term) “allow”来讲,总共有两篇?文档包含此词(Term),从?而词(Term)后?面的?文档链表总共有两项,第?一项表?示包含“allow”的第?一篇?文档,即1号?文档,此?文档中,“allow”出现了2次,第?二项表?示包含“allow”的第?二个?文档,是2号?文档,此?文档中,“allow”出现了1次。

到此为?止,索引已经创建好了,我们可以通过它很快的找到我们想要的?文档。?而且在此过程中,我们惊喜地发现,搜

索“drive”,“driving”,“drove”,“driven”也能够被搜到。因为在我们的索引中,“driving”,“drove”,“driven”都会经过语?言处理?而变成“drive”,在搜索时,如果您输?入“driving”,输?入的查询语句同样经过我们这?里的?一到三步,从?而变为查询“drive”,从?而可以搜索到想要的?文档。

三、如何对索引进?行搜索?

到这?里似乎我们可以宣布“我们找到想要的?文档了”。

然?而事情并没有结束,找到了仅仅是全?文检索的?一个?方?面。不是吗?如果仅仅只有?一个或??十个?文档包含我们查询的字符串,我们的确找到了。然?而如果结果有?一千个,甚?至成千上万个呢?那个又是您最想要的?文件呢?

打开Google吧,?比如说您想在微软找份?工作,于是您输?入“Microsoft job”,您却发现总共有22600000个结果返回。好?大的数字呀,突然发现找不到是?一个问题,找到的太多也是?一个问题。在如此多的结果中,如何将最相关的放在最前?面呢?

当然Google做的很不错,您?一下就找到了jobs at Microsoft。想象?一下,如果前?几个全部是“Microsoft does a good job at software industry…”将是多么可怕的事情呀。

如何像Google?一样,在成千上万的搜索结果中,找到和查询语句最相关的呢?如何判断搜索出的?文档和查询语句的相关性呢?

这要回到我们第三个问题:如何对索引进?行搜索?

搜索主要分为以下?几步:

第?一步:?用户输?入查询语句。

查询语句同我们普通的语?言?一样,也是有?一定语法的。

不同的查询语句有不同的语法,如SQL语句就有?一定的语法。

查询语句的语法根据全?文检索系统的实现?而不同。最基本的有?比如:AND, OR, NOT等。

举个例?子,?用户输?入语句:lucene AND learned NOT hadoop。

说明?用户想找?一个包含lucene和learned然?而不包括hadoop的?文档。

第?二步:对查询语句进?行词法分析,语法分析,及语?言处理。

由于查询语句有语法,因?而也要进?行语法分析,语法分析及语?言处理。

1. 词法分析主要?用来识别单词和关键字。

如上述例?子中,经过词法分析,得到单词有lucene,learned,hadoop, 关键字有AND, NOT。

如果在词法分析中发现不合法的关键字,则会出现错误。如lucene AMD learned,其中由于AND拼错,导致AMD作为?一个普通的单词参与查询。

2. 语法分析主要是根据查询语句的语法规则来形成?一棵语法树。

如果发现查询语句不满?足语法规则,则会报错。如lucene NOT AND learned,则会出错。

如上述例?子,lucene AND learned NOT hadoop形成的语法树如下:

3. 语?言处理同索引过程中的语?言处理?几乎相同。

如learned变成learn等。

经过第?二步,我们得到?一棵经过语?言处理的语法树。

第三步:搜索索引,得到符合语法树的?文档。

此步骤有分?几?小步:

1.?首先,在反向索引表中,分别找出包含lucene,learn,hadoop的?文档链

表。

2.其次,对包含lucene,learn的链表进?行合并操作,得到既包含lucene又包

含learn的?文档链表。

3.然后,将此链表与hadoop的?文档链表进?行差操作,去除包含hadoop的?文

档,从?而得到既包含lucene又包含learn?而且不包含hadoop的?文档链表。

4.此?文档链表就是我们要找的?文档。

第四步:根据得到的?文档和查询语句的相关性,对结果进?行排序。虽然在上?一步,我们得到了想要的?文档,然?而对于查询结果应该按照与查询语句的相关性进?行排序,越相关者越靠前。

如何计算?文档和查询语句的相关性呢?

不如我们把查询语句看作?一?片短?小的?文档,对?文档与?文档之间的相关性(relevance)进?行打分(scoring),分数?高的相关性好,就应该排在前?面。

那么又怎么对?文档之间的关系进?行打分呢?

这可不是?一件容易的事情,?首先我们看?一看判断?人之间的关系吧。

?首先看?一个?人,往往有很多要素,如性格,信仰,爱好,?衣着,?高矮,胖瘦等等。

其次对于?人与?人之间的关系,不同的要素重要性不同,性格,信仰,爱好可能重要些,?衣着,?高矮,胖瘦可能就不那么重要了,所以具有相同或相似性格,

信仰,爱好的?人?比较容易成为好的朋友,然?而?衣着,?高矮,胖瘦不同的?人,也可以成为好的朋友。

因?而判断?人与?人之间的关系,?首先要找出哪些要素对?人与?人之间的关系最重要,?比如性格,信仰,爱好。其次要判断两个?人的这些要素之间的关系,?比如?一个?人性格开朗,另?一个?人性格外向,?一个?人信仰佛教,另?一个信仰上帝,?一个?人爱好打篮球,另?一个爱好踢?足球。我们发现,两个?人在性格?方?面都很积极,信仰?方?面都很善良,爱好?方?面都爱运动,因?而两个?人关系应该会很好。

我们再来看看公司之间的关系吧。

?首先看?一个公司,有很多?人组成,如总经理,经理,?首席技术官,普通员?工,保安,门卫等。

其次对于公司与公司之间的关系,不同的?人重要性不同,总经理,经理,?首席技术官可能更重要?一些,普通员?工,保安,门卫可能较不重要?一点。所以如果两个公司总经理,经理,?首席技术官之间关系?比较好,两个公司容易有?比较好的关系。然?而?一位普通员?工就算与另?一家公司的?一位普通员?工有?血海深仇,怕也难影响两个公司之间的关系。

因?而判断公司与公司之间的关系,?首先要找出哪些?人对公司与公司之间的关系最重要,?比如总经理,经理,?首席技术官。其次要判断这些?人之间的关系,不如两家公司的总经理曾经是同学,经理是?老乡,?首席技术官曾是创业伙伴。我们发现,两家公司?无论总经理,经理,?首席技术官,关系都很好,因?而两家公司关系应该会很好。

分析了两种关系,下?面看?一下如何判断?文档之间的关系了。

?首先,?一个?文档有很多词(Term)组成,如search, lucene, full-text, this, a, what 等。

其次对于?文档之间的关系,不同的Term重要性不同,?比如对于本篇?文档,search, Lucene, full-text就相对重要?一些,this, a , what可能相对不重要?一些。所以如果两篇?文档都包含search, Lucene,fulltext,这两篇?文档的相关性好?一些,然?而就算?一篇?文档包含this, a, what,另?一篇?文档不包含this, a, what,也不能影响两篇?文档的相关性。

因?而判断?文档之间的关系,?首先找出哪些词(Term)对?文档之间的关系最重要,如search, Lucene, fulltext。然后判断这些词(Term)之间的关系。

找出词(Term)对?文档的重要性的过程称为计算词的权重(Term weight)的过程。计算词的权重(term weight)有两个参数,第?一个是词(Term),第?二个是?文档(Document)。

词的权重(Term weight)表?示此词(Term)在此?文档中的重要程度,越重要的词(Term)有越?大的权重(Term weight),因?而在计算?文档之间的相关性中将发挥更?大的作?用。

判断词(Term)之间的关系从?而得到?文档相关性的过程应?用?一种叫做向量空间模型的算法(Vector Space Model)。

下?面仔细分析?一下这两个过程:

1. 计算权重(Term weight)的过程。

影响?一个词(Term)在?一篇?文档中的重要性主要有两个因素:

?Term Frequency (tf):即此Term在此?文档中出现了多少次。tf 越?大说明越

重要。

?Document Frequency (df):即有多少?文档包含次Term。df 越?大说明越不重要。

容易理解吗?词(Term)在?文档中出现的次数越多,说明此词(Term)对该?文档越重要,如“搜索”这个词,在本?文档中出现的次数很多,说明本?文档主要就是讲这?方?面的事的。然?而在?一篇英语?文档中,this出现的次数更多,就说明越重要吗?不是的,这是由第?二个因素进?行调整,第?二个因素说明,有越多的?文档包含此词(Term), 说明此词(Term)太普通,不?足以区分这些?文档,因?而重要性越低。这也如我们程序员所学的技术,对于程序员本?身来说,这项技术掌握越深越好(掌握越深说明花时间看的越多,tf越?大),找?工作时越有竞争?力。然?而对于所有程序员来说,这项技术懂得的?人越少越好(懂得的?人少df?小),找?工作越有竞争?力。?人的价值在于不可替代性就是这个道理。

道理明?白了,我们来看看公式:

这仅仅只term weight计算公式的简单典型实现。实现全?文检索系统的?人会有?自?己的实现,Lucene就与此稍有不同。

2. 判断Term之间的关系从?而得到?文档相关性的过程,也即向量空间模型的算法(VSM)。

我们把?文档看作?一系列词(Term),每?一个词(Term)都有?一个权重(Term weight),不同的词(Term)根据?自?己在?文档中的权重来影响?文档相关性的打分计算。

于是我们把所有此?文档中词(term)的权重(term weight) 看作?一个向量。Document = {term1, term2, …… ,term N}

Document Vector = {weight1, weight2, …… ,weight N}

同样我们把查询语句看作?一个简单的?文档,也?用向量来表?示。

Query = {term1, term 2, …… , term N}

Query Vector = {weight1, weight2, …… , weight N}

我们把所有搜索出的?文档向量及查询向量放到?一个N维空间中,每个词(term)是?一维。

如图:

我们认为两个向量之间的夹?角越?小,相关性越?大。

所以我们计算夹?角的余弦值作为相关性的打分,夹?角越?小,余弦值越?大,打分越?高,相关性越?大。

有?人可能会问,查询语句?一般是很短的,包含的词(Term)是很少的,因?而查询向量的维数很?小,?而?文档很长,包含词(Term)很多,?文档向量维数很?大。你的图中两者维数怎么都是N呢?

在这?里,既然要放到相同的向量空间,?自然维数是相同的,不同时,取?二者的并集,如果不含某个词(Term)时,则权重(Term Weight)为0。

相关性打分公式如下:

举个例?子,查询语句有11个Term ,共有三篇?文档搜索出来。其中各?自的权重(Term weight),如下表格。 于是计算,三篇?文档同查询语句的相关性打分分别为:

于是?文档?二相关性最?高,先返回,其次是?文档?一,最后是?文档三。到此为?止,我们可以找到我们最想要的?文档了。

对上述索引创建和搜索过程所?一个总结,如图:

t1

t2t3t4t5

t6

t7t8t9t10t11D100.4770.477.176000.1760D20.1760.4770000.9540

.176

D30.176000.176000.176.176Q

.176

.477

.176

1. 索引过程:

1) 有?一系列被索引?文件

2) 被索引?文件经过语法分析和语?言处理形成?一系列词(Term)。

3) 经过索引创建形成词典和反向索引表。

4) 通过索引存储将索引写?入硬盘。

2. 搜索过程:

a) ?用户输?入查询语句。

b) 对查询语句经过语法分析和语?言分析得到?一系列词(Term)。

c) 通过语法分析得到?一个查询树。

d) 通过索引存储将索引读?入到内存。

e) 利?用查询树搜索索引,从?而得到每个词(Term)的?文档链表,对?文档链表进?行交,差,并得到结果?文档。

f) 将搜索到的结果?文档对查询的相关性进?行排序。

g) 返回查询结果给?用户。

一种基于Lucene的中文全文检索系统

—94— 一种基于Lucene 的中文全文检索系统 苏潭英1,郭宪勇2,金 鑫3 (1. 解放军信息工程大学电子技术学院,郑州 450004;2. 北京飞燕技术公司,北京 100072;3. 解放军通信指挥学院,武汉 430010)摘 要:在开源全文索引引擎Lucene 的基础上,设计了一个中文全文检索系统模型,该模型系统由7个模块组成,索引模块、检索模块是其中的核心部分。论述了模型的整体结构,分析设计了索引及检索模块,通过具体的索引技术和检索技术来提高整个系统的检索效率。该系统增加了加密模块,实现对建立的全文索引进行加密处理,增强了信息的安全性。 关键词:全文检索;Lucene ;倒排索引 Chinese Full-text Retrieval System Based on Lucene SU Tan-ying 1, GUO Xian-yong 2, JIN Xin 3 (1. Institute of Electronic Technology, PLA Information Engineering University, Zhengzhou 450004; 2. Technology Company of Beijing Feiyan, Beijing 100072; 3. Institute of PLA Communication Command, Wuhan 430010) 【Abstract 】This paper proposes a model of Chinese full-text retrieval system based on Lucene which is an open source full-text retrieval engine,and expatiates its frame. This model is composed of seven modules, among which the index module and the search module are the core parts. It designs them concretely, and improves the search efficiency of the full-text retrieval system with index technology and search technology. The system model concludes an encryption module to encrypt the index and increases the system security. 【Key words 】full-text retrieval; Lucene; inverse index 计 算 机 工 程Computer Engineering 第33卷 第23期 Vol.33 No.23 2007年12月 December 2007 ·软件技术与数据库· 文章编号:1000—3428(2007)23—0094—03 文献标识码:A 中图分类号:TP391 1 中文全文检索系统 全文检索技术是一个最普遍的信息查询应用,人们每天在网上使用Google 、百度等搜索引擎查找自己所需的信息,这些搜索引擎的核心技术之一就是全文检索。随着文档处理电子化、无纸化的发展,图书馆、新闻出版、企业甚至个人的电子数据激增,如何建立数据库、管理好自己的数据,是亟待解决的问题,而全文检索是其中一个非常实用的功能。全文检索产品实际上是一个内嵌该项技术的数据库产品[1]。 西文的全文检索已有许多成熟的理论与方法,其中,开放源代码的全文检索引擎Lucene 是Apache 软件基金会Jakarta 项目组的一个子项目,它的目的是为软件开发人员提供一个简单易用的工具包,方便在目标系统中实现全文检索的功能。很多项目使用了Lucene 作为其后台的全文索引引擎,比较著名的有: (1)Jive :Web 论坛系统; (2)Cocoon :基于XML 的Web 发布框架,全文检索部分使用了Lucene ; (3)Eclipse :基于Java 的开放开发平台,帮助部分的全文索引使用了Lucene 。 Lucene 不支持中文,但可以通过扩充它的语言分析器实现对中文的检索。本文在深入学习研究Lucene 的前提下,设计了一个中文的全文检索系统,对其核心的索引模块和检索模块进行了阐释,并添加了加密模块对索引信息加密,增强了系统的安全性。 2 系统的总体结构 本模型总体上采用了Lucene 的架构。Lucene 的体系结构如表1所示,它的源代码程序由7个模块组成。 表1 Lucene 的组成结构 模块名 功能 org.apache.Lucene.search 搜索入口 org.apache.Lucene.index 索引入口 org.apache.Lucene.analysis 语言分析器 org.apache.Lucene.queryParser 查询分析器 org.apache.Lucene.document 存储结构 org.apache.Lucene.store 底层IO/存储结构 org.apache.Lucene.util 一些公用的数据结构 本文通过扩充Lucene 系统来完成中文的全文检索系统,Lucene 包含了大量的抽象类、接口、文档类型等,需要根据具体应用来定义实现,本文对其作了如下扩充修改: (1)按照中文的词法结构来构建相应的语言分析器。Lucene 的语言分析器提供了抽象的接口,因此,语言分析(analyser)是可以定制的。Lucene 缺省提供了2个比较通用的分析器SimpleAnalyser 和StandardAnalyser ,但这2个分析器缺省都不支持中文,因此,要加入对中文语言的切分规则,需要对其进行修改。 (2)按照被索引的文件的格式对不同类型的文档进行解析,进而建立全文索引。例如HTML 文件,通常需要把其中的内容分类加入索引,这就需要从org.apache.lucene.子document 中定义的类Document 继承,定义自己的HTMLDocument 类,然后将之交给org. apache.lucene.index 模块写入索引文件。Lucene 没有规定数据源的格式,只提供 作者简介:苏潭英(1981-),女,硕士研究生,主研方向:数据库全文检索;郭宪勇,高级工程师;金 鑫,硕士研究生 收稿日期:2007-01-10 E-mail :sutanyingwendy@https://www.doczj.com/doc/a65231220.html,

搜索引擎基本工作原理

搜索引擎基本工作原理 目录 1工作原理 2搜索引擎 3目录索引 4百度谷歌 5优化核心 6SEO优化 ?网站url ? title信息 ? meta信息 ?图片alt ? flash信息 ? frame框架 1工作原理 搜索引擎的基本工作原理包括如下三个过程:首先在互联网中发现、搜集网页信息;同时对信息进行提取和组织建立索引库;再由检索器根据用户输入的查询关键字,在索引库中快速检出文档,进行文档与查询的相关度评价,对将要输出的结果进行排序,并将查询结果返回给用户。 1、抓取网页。每个独立的搜索引擎都有自己的网页抓取程序爬虫(spider)。爬虫Spider顺着网页中的超链接,从这个网站爬到另一个网站,通过超链接分析连续访问抓取更多网页。被抓取的网页被称之为网页快照。由于互联网中超链接的应用很普遍,理论上,从一定范围的网页出发,就能搜集到绝大多数的网页。 2、处理网页。搜索引擎抓到网页后,还要做大量的预处理工作,才能提供检索服务。其中,最重要的就是提取关键词,建立索引库和索引。其他还包括去除重

复网页、分词(中文)、判断网页类型、分析超链接、计算网页的重要度/丰富度等。 3、提供检索服务。用户输入关键词进行检索,搜索引擎从索引数据库中找到匹配该关键词的网页;为了用户便于判断,除了网页标题和URL外,还会提供一段来自网页的摘要以及其他信息。 搜索引擎基本工作原理 2搜索引擎 在搜索引擎分类部分我们提到过全文搜索引擎从网站提取信息建立网页数据库 的概念。搜索引擎的自动信息搜集功能分两种。一种是定期搜索,即每隔一段时间(比如Google一般是28天),搜索引擎主动派出“蜘蛛”程序,对一定IP 地址范围内的互联网站进行检索,一旦发现新的网站,它会自动提取网站的信息和网址加入自己的数据库。 另一种是提交网站搜索,即网站拥有者主动向搜索引擎提交网址,它在一定时间内(2天到数月不等)定向向你的网站派出“蜘蛛”程序,扫描你的网站并将有关信息存入数据库,以备用户查询。由于搜索引擎索引规则发生了很大变化,主动提交网址并不保证你的网站能进入搜索引擎数据库,因此目前最好的办法是多获得一些外部链接,让搜索引擎有更多机会找到你并自动将你的网站收录。 当用户以关键词查找信息时,搜索引擎会在数据库中进行搜寻,如果找到与用户要求内容相符的网站,便采用特殊的算法——通常根据网页中关键词的匹配程度,

Lucene:基于Java的全文检索引擎简介

由于数据库索引不是为全文索引设计的,因此,使用like "%keyword%"时,数据库索引是不起作用的,在使用like查询时,搜索过程又变成类似于一页页翻书的遍历过程了,所以对于含有模糊查询的数据库服务来说,LIKE对性能的危害是极大的。如果是需要对多个关键词进行模糊匹配:like"%keyword1%" and like "%keyword2%" ...其效率也就可想而知了。 所以建立一个高效检索系统的关键是建立一个类似于科技索引一样的反向索引机制,将数据源(比如多篇文章)排序顺序存储的同时,有另外一个排好序的关键词列表,用于存储关键词==>文章映射关系,利用这样的映射关系索引:[关键词==>出现关键词的文章编号,出现次数(甚至包括位置:起始偏移量,结束偏移量),出现频率],检索过程就是把模糊查询变成多个可以利用索引的精确查询的逻辑组合的过程。从而大大提高了多关键词查询的效率,所以,全文检索问题归结到最后是一个排序问题。 由此可以看出模糊查询相对数据库的精确查询是一个非常不确定的问题,这也是大部分数据库对全文检索支持有限的原因。Lucene最核心的特征是通过特殊的索引结构实现了传统数据库不擅长的全文索引机制,并提供了扩展接口,以方便针对不同应用的定制。 可以通过一下表格对比一下数据库的模糊查询: Lucene全文索引引擎数据库 索引将数据源中的数据都通过全文索引一一建立反向索引对于LIKE查询来说,数据传统的索引是根本用不上的。数据需要逐个便利记录进 行GREP式的模糊匹配,比有索引的搜索速度要有多个数量级的下降。 匹配效果通过词元(term)进行匹配,通过语言分析接口的实 现,可以实现对中文等非英语的支持。 使用:like "%net%" 会把netherlands也匹 配出来, 多个关键词的模糊匹配:使用like "%com%net%":就不能匹配词序颠倒 的https://www.doczj.com/doc/a65231220.html, 匹配度有匹配度算法,将匹配程度(相似度)比较高的结果排在前面。没有匹配程度的控制:比如有记录中net出现5词和出现1次的,结果是一样的。 结果输出通过特别的算法,将最匹配度最高的头100条结果 输出,结果集是缓冲式的小批量读取的。 返回所有的结果集,在匹配条目非常多的 时候(比如上万条)需要大量的内存存放 这些临时结果集。 可定制性通过不同的语言分析接口实现,可以方便的定制出 符合应用需要的索引规则(包括对中文的支持)没有接口或接口复杂,无法定制 结论高负载的模糊查询应用,需要负责的模糊查询的规则,索引的资料量比较大使用率低,模糊匹配规则简单或者需要模糊查询的资料量少 全文检索和数据库应用最大的不同在于:让最相关的头100条结果满足98%以上用户的需求 Lucene的创新之处: 大部分的搜索(数据库)引擎都是用B树结构来维护索引,索引的更新会导致大量的IO操作,Lucene在实现中,对此稍微有所改进:不是维护一个索引文件,而是在扩展索引的时候不断创建新的索引文件,然后定期的把这些新的小索引文件合并到原先的大索引中(针对不同的更新策略,批次的大小可以调整),这样在不影响检索的效率的前提下,提高了索引的效率。 Lucene和其他一些全文检索系统/应用的比较: Lucene其他开源全文检索系统 增量索引和批量索引可以进行增量的索引(Append),可以对于大量 数据进行批量索引,并且接口设计用于优化批 量索引和小批量的增量索引。 很多系统只支持批量的索引,有时数 据源有一点增加也需要重建索引。 数据源Lucene没有定义具体的数据源,而是一个文档 的结构,因此可以非常灵活的适应各种应用 (只要前端有合适的转换器把数据源转换成相 应结构), 很多系统只针对网页,缺乏其他格式 文档的灵活性。 索引内容抓取Lucene的文档是由多个字段组成的,甚至可以 控制那些字段需要进行索引,那些字段不需要 索引,近一步索引的字段也分为需要分词和不 需要分词的类型: 需要进行分词的索引,比如:标题,文章内 容字段 不需要进行分词的索引,比如:作者/日期 字段 缺乏通用性,往往将文档整个索引了

搜索引擎基本工作原理

搜索引擎基本原理 一.全文搜索引擎 在搜索引擎分类部分我们提到过全文搜索引擎从网站提取信息建立网页数据库的概念。搜索引擎的自动信息搜集功能分两种。一种是定期搜索,即每隔一段时间(比如Google一般是28天),搜索引擎主动派出“蜘蛛”程序,对一定IP地址范围内的互联网站进行检索,一旦发现新的网站,它会自动提取网站的信息和网址加入自己的数据库。 另一种是提交网站搜索,即网站拥有者主动向搜索引擎提交网址,它在一定时间内(2天到数月不等)定向向你的网站派出“蜘蛛”程序,扫描你的网站并将有关信息存入数据库,以备用户查询。由于近年来搜索引擎索引规则发生了很大变化,主动提交网址并不保证你的网站能进入搜索引擎数据库,因此目前最好的办法是多获得一些外部链接,让搜索引擎有更多机会找到你并自动将你的网站收录。 当用户以关键词查找信息时,搜索引擎会在数据库中进行搜寻,如果找到与用户要求内容相符的网站,便采用特殊的算法——通常根据网页中关键词的匹配程度,出现的位置/频次,链接质量等——计算出各网页的相关度及排名等级,然后根据关联度高低,按顺序将这些网页链接返回给用户。 二.目录索引 与全文搜索引擎相比,目录索引有许多不同之处。 首先,搜索引擎属于自动网站检索,而目录索引则完全依赖手工操作。用户提交网站后,目录编辑人员会亲自浏览你的网站,然后根据一套自定的评判标准甚至编辑人员的主观印象,决定是否接纳你的网站。 其次,搜索引擎收录网站时,只要网站本身没有违反有关的规则,一般都能登录成功。而目录索引对网站的要求则高得多,有时即使登录多次也不一定成功。

尤其象Yahoo!这样的超级索引,登录更是困难。(由于登录Yahoo!的难度最大,而它又是商家网络营销必争之地,所以我们会在后面用专门的篇幅介绍登录Yahoo雅虎的技巧) 此外,在登录搜索引擎时,我们一般不用考虑网站的分类问题,而登录目录索引时则必须将网站放在一个最合适的目录(Directory)。 最后,搜索引擎中各网站的有关信息都是从用户网页中自动提取的,所以用户的角度看,我们拥有更多的自主权;而目录索引则要求必须手工另外填写网站信息,而且还有各种各样的限制。更有甚者,如果工作人员认为你提交网站的目录、网站信息不合适,他可以随时对其进行调整,当然事先是不会和你商量的。 目录索引,顾名思义就是将网站分门别类地存放在相应的目录中,因此用户在查询信息时,可选择关键词搜索,也可按分类目录逐层查找。如以关键词搜索,返回的结果跟搜索引擎一样,也是根据信息关联程度排列网站,只不过其中人为因素要多一些。如果按分层目录查找,某一目录中网站的排名则是由标题字母的先后顺序决定(也有例外)。 目前,搜索引擎与目录索引有相互融合渗透的趋势。原来一些纯粹的全文搜索引擎现在也提供目录搜索,如Google就借用Open Directory目录提供分类查询。而象 Yahoo! 这些老牌目录索引则通过与Google等搜索引擎合作扩大搜索范围。在默认搜索模式下,一些目录类搜索引擎首先返回的是自己目录中匹配的网站,如国内搜狐、新浪、网易等;而另外一些则默认的是网页搜索,如Yahoo。

搜索引擎

搜索引擎简介 专业:智能1001 学号:06103008 姓名:周树亮

搜索引擎 有人说,会搜索才叫会上网,搜索引擎在我们日常生活中的地位已是举足轻重。 你也许是个刚要兴冲冲地要上网冲浪,也许已经在互联网上蛰伏了好几年,无论怎样,要想在浩如烟海的互联网信息中找到自己所需的信息,都需要一点点技巧。 对于企业而言,学习搜索,提高技巧,就能找到更多的潜在客户。对于大家而言,学习搜索引擎技巧可以有助我们的学习和生活! 一、搜索引擎含义由来及发展历史 1、搜索引擎(search engines)px+no2end px 是对互联网上的信息资源进行搜集整理,然后供你查询的系统,它包括信息搜集、信息整理和用户查询三部分。 搜索引擎是一个为你提供信息“检索”服务的网站,它使用某些程序把因特网上的所有信息归类以帮助人们在茫茫网海中搜寻到所需要的信息。 早期的搜索引擎是把因特网中的资源服务器的地址收集起来,由其提供的资源的类型不同而分成不同的目录,再一层层地进行分类。人们要找自己想要的信息可按他们的分类一层层进入,就能最后到达目的地,找到自己想要的信息。这其实是最原始的方式,只适用于因特网信息并不多的时候。随着因特网信息按几何式增长,出现了真正意义上的搜索引擎,这些搜索引擎知道网站上每一页的开始,随后搜索因特网上的所有超级链接,把代表超级链接的所有词汇放入一个数据库。这就是现在搜索引擎的原型。 2.搜索引擎发展史 在互联网发展初期,网站相对较少,信息查找比较容易。然而伴随互联网爆炸性的发展,普通网络用户想找到所需的资料简直如同大海捞针,这时为满足大众信息检索需求的专业搜索网站便应运而生了。现代意义上的搜索引擎的祖先,是1990年由蒙特利尔大学学生Alan Emtage发明的Archie。虽然当时World Wide Web还未出现,但网络中文件传输还是相当频繁的,而且由于大量的文件散布在各个分散的FTP主机中,查询起来非常不便,因此Alan Emtage想到了开发一个可以以文件名查找文件的系统,于是便有了Archie。Archie工作原理与现在的搜索引擎已经很接近,它依靠脚本程序自动搜索网上的文件,然后对有关信息进行索引,供使用者以一定的表达式查询。由于Archie深受用户欢迎,受其启发,美国内华达System Computing Services 大学于1993年开发了另一个与之非常相似的搜索工具,不过此时的搜索工具除了索引文件外,已能检索网页。当时,“机器人” 一词在编程者中十分流行。 二、搜索引擎介绍及其使用技巧 人们经常问我搜索技巧,虽然要成为一个搜索专家远非学几条技巧那么简单,但确实有些精彩的搜索技巧能够极大的提高你的搜索能力,帮你成为不错的网络侦探。 这里是我的十条最精华的搜索技巧,它们大致分为基础技巧、通用搜索策略、以及何时使用专业搜索工具的建议。 每一个搜索都是不同的,如果你为每一个搜索都选择最好的搜索工具,那么每次你都会得到最好的搜索结果。最常见的选择是使用全文搜索引擎还是网站分类目录。 一般的规则是,如果你在找什么特殊的内容或文件,那么使用全文搜索引擎如google和altavista,如果你想从总体上或比较全面的了解一个主题,那么使用网站分类目录如yahoo和odp。 对于特殊类型的信息考虑使用特殊的搜索工具,比如你要找人或找地点,那么使用专业的寻人引擎或地图和位置搜索网站。 事实上几乎每种主题都有特殊的搜索工具。 如果有个陌生人跑过来对你说"anchovy paste!" 或 "sibberidge!" ,你会有什么反映呢?大多数人会笑,或者询问那个人到底想说什么。可是搜索引擎无法作出这种选择——它们只能猜测你的问题,然后提供它们利用这有限的信息能够得到的最好结果。 好的搜索请求应该包含多个能限制搜索范围的关键词。 多数搜索引擎对自然语言的处理很好。事实上,搜索引擎能够从语句结构得到很有用的信息,不会象仅得到几个关键词那样容易迷失。 与其输入几个不合语法的关键词,还不如试一下一句自然的提问。与其搜索“北京公交车路线”,不如试一下 "我在北京如何乘坐公交车?"

基于Lucene的网站全文搜索的设计与实现.

科技情报开发与经济 文章编号:1005-6033(2005)15-0242-03 SCI/TECHINFORMATIONDEVELOPMENT&ECONOMY2005年第15卷第15期 收稿日期:2005-06-03 基于Lucene的网站全文搜索的设计与实现 陈庆伟1,刘 军2 (1.山西省网络管理中心,山西太原,030001;2.山西省科技情报研究所,山西太原,030001)摘要:Lucene是一个基于Java技术的开放源代码全文索引引擎工具包,它可以方便 地嵌入到各种应用中实现针对应用的全文索引/检索功能。利用Lucene的API可以比较方便地为一个网站提供全文搜索功能。探讨了如何使用Lucene建造一个通用的Web站点全文搜索工具,并对在构建系统中应注意的若干问题进行了探讨。关键词:全文搜索;Lucene;Java中图分类号:TP393.07文献标识码:A 在构建一个信息类Web站点的时候,站点的全文搜索功能是必备的功能之一。一般站点的信息内容都存储在各种数据库系统中,并使用数据库提供的检索和查询功能构建网站的搜索功能。但随着信息的累‘%keyword%’查询构成的数据检索性能将积,使用数据库中的类似like急剧下降,因此,只使用数据库查询进行全文检索并不是一个好的解决它可以方便方案。Lucene是一个基于Java技术的全文索引引擎工具包,

地嵌入到各种应用中实现针对应用的全文索引/检索功能。例如Lucene可以快速实现一个简单、功能强大的数据全文检索系统。 PDFWord XSLT 格式化 各种输出 Text XML输出 XML格式 XML中间格式 DBLuceneDB 1设计目标 全文检索系统的主要功能就是为信息资料提供全文索引和查询。对 其他 专业格式 图1 接口的实现示意图 于一个以提供信息资料为主要目的网站来说,网站的全文检索系统是必备功能之一。但对于小型的信息网站来说,购置全文检索系统的代价经‘keyword’查询来代替全文检索常是昂贵的。如果只使用数据库的Like

搜索引擎工作原理

搜索引擎工作原理 在搜索引擎的后台,有一些收集网页信息的程序。收集到的信息一般是能够表明网站内容的关键词或短语。然后,信息的索引存储在数据库中。 搜索引擎的系统架构和操作模式吸收了信息检索系统设计中的许多宝贵经验,并根据万维网数据和用户的特点进行了许多修改。其核心文档处理和查询处理的过程基本上是类似传统信息检索系统的工作原理,但它处理的数据对象的复杂特征,也就是说,万维网数据,确定搜索引擎系统必须调整其系统结构,以满足数据处理和用户查询的需求搜索引擎的基本工作原理包括如下三个过程:首先在互联网中发现、搜集网页信息;同时对信息进行提取和组织建立索引库;再由检索器根据用户输入的查询关键字,在索引库中快速检出文档,进行文档与查询的相关度评价,对将要输出的结果进行排序,并将查询结果返回给用户。 3、1、抓取网页。每个独立的搜索引擎都有自己的网页抓取程序爬虫(spider)。爬虫Spider顺着网页中的超链接,从这个网站爬到另一个网站,通过超链接分析连续访问抓取更多网页。被抓取的网页被称之为网页快照。由于互联网中超链接的应用很普遍,理论上,从一定范围的网页出发,就能搜集到绝大多数的网页。 4、2、处理网页。搜索引擎抓到网页后,还要做大量的预处理工作,才能提供检索服务。其中,最重要的就是提取关键词,建立索引库和索引。其他还包括去除重复网页、分词(中文)、判断网页类型、分

析超链接、计算网页的重要度/丰富度等。 5、提供检索服务。用户输入关键词进行检索,搜索引擎从索引数据库中找到匹配该关键词的网页;为了用户便于判断,除了网页标题和URL外,还会提供一段来自网页的摘要以及其他信息。 在搜索引擎分类部分我们提到过全文搜索引擎从网站提取信息建立网页数据库的概念。搜索引擎的自动信息搜集功能分两种。一种是定期搜索,即每隔一段时间(比如Google一般是28天),搜索引擎主动派出“蜘蛛”程序,对一定IP地址范围内的互联网站进行检索,一旦发现新的网站,它会自动提取网站的信息和网址加入自己的数据库。 另一种是提交网站搜索,即网站拥有者主动向搜索引擎提交网址,它在一定时间内(2天到数月不等)定向向你的网站派出“蜘蛛”程序,扫描你的网站并将有关信息存入数据库,以备用户查询。由于搜索引擎索引规则发生了很大变化,主动提交网址并不保证你的网站能进入搜索引擎数据库,因此目前最好的办法是多获得一些外部链接,让搜索引擎有更多机会找到你并自动将你的网站收录。 当用户以关键词查找信息时,搜索引擎会在数据库中进行搜寻,如果找到与用户要求内容相符的网站,便采用特殊的算法——通常根据网页中关键词的匹配程度,出现的位置、频次,链接质量等——计算出各网页的相关度及排名等级,然后根据关联度高低,按顺序将这些网页链接返回给用户。

搜索引擎论文

搜索引擎发展状态及未来趋势 【摘要】 搜索引擎包括图片搜索引擎、全文索引、目录索引等,其发展历史可分为五个阶段,目前企业搜索引擎和网站运营搜索引擎运用范围较广。在搜索引擎的未来发展中,呈现出个性化,多元化,智能化,移动化,社区化等多个趋势。 【关键词】 发展起源、索引、数据库、网站运营、未来趋势 【参考文献】 《个性化搜索引擎原理与技术》《搜索引擎的设计与实现》搜索引擎是指根据一定的策略、运用特定的计算机程序从互联网上搜集信息,在对信息进行组织和处理后,为用户提供检索服务,将用户检索相关的信息展示给用户的系统。其工作作原理分为抓取网页,处理网页和提供检索服务。抓取每个独立的搜索引擎都有自己的网页抓取程序,它顺着网页中的超链接,连续地抓取网页。由于互联网中超链接的应用很普遍,理论上,从一定范围的网页出发,就能搜集到绝大多数的网页。搜索引擎抓到网页后,还要做大量的预处理工作,才能提供检索服务。其中,最重要的就是提取关键词,建立索引文件。 搜索引擎的发展起源可以追溯到第一个Gopher搜索工具Veronica。后来的搜索引擎的发展分为五个阶段。第一阶段,出现World wide Web Wanderer,用于追踪互联网发展规模。刚开始它只用来统

计互联网上的服务器数量,后来则发展为也能够捕获网址。第二阶段,出现了以概念搜索闻名的Excite以及元搜索引擎Dogpile。第三阶段,即yahoo的出现。随着访问量和收录链接数的增长,Yahoo目录开始支持简单的数据库搜索。Yahoo以后陆续有Google等提供搜索引擎服务,但不可否认的是,Yahoo几乎成为20世纪90年代的因特网的代名词。第四阶段,一种新的搜索引擎形式出现了,即元搜索引擎。用户只需提交一次搜索请求,由元搜索引擎负责转换处理后提交给多个预先选定的独立搜索引擎,并将从各独立搜索引擎返回的所有查询结果,集中起来处理后再返回给用户。第五阶段的代表是智能检索的产生:它利用分词词典、同义词典,同音词典改善检索效果,进一步还可在知识层面或者说概念层面上辅助查询,给予用户智能知识提示,最终帮助用户获得最佳的检索效果。 搜索引擎目前包括图片搜索引擎、全文索引、目录索引、元搜索引擎、垂直搜索引擎等。全文索引引擎是名副其实的搜索引擎,国外代表有Google,国内有百度、搜狐等。它们从互联网提取各个网站的信息,建立起数据库,并能检索与用户查询条件相匹配的记录,按一定的排列顺序返回结果。搜索引擎的自动信息搜集功能分为定期搜索和提交网站搜索。它的特点是搜全率比较高。目录索引,就是将网站分门别类地存放在相应的目录中,因此用户在查询信息时,可选择关键词搜索,也可按分类目录逐层查找。与全文搜索引擎相比,目录索引有许多不同之处。首先,搜索引擎属于自动网站检索,而目录索引则完全依赖手工操作。其次,搜索引擎收录网站时,只要网站本身

Lucene全文检索的应用及检索效率测试研究

Luc e ne全文检索的应用 及检索效率测试研究3 彭 哲 陈敬文 【摘 要】使用Lucene设计一个全文检索系统,系统由三大功能模块组成:索引模块、检索模块和存储模块。第二部分着重分析PDF数据转换,X M L文档设计,索引的分词、建立及效率等技术难点,并对中文分词分析器、索引文件膨胀率、索引影响因子及检索系统并对检索响应时间进行测试。应关注X M L数据库的安全性。【关键词】Lucence X M L 全文检索 效率 Abstract:Using lucene de sign a full t ext retrieval syst em,including index mo dule,retrieval mo dule,a nd dat a ba se mo dule1Mainly a nalyze how to tra nsform PDF to X M L,de signing of X M L dat a ba se,Chine se word se gment ation,founding a nd efficiency of indexe s,then t e st s a nalyzer,exp a nsivity,f a ctors of indexe s a nd re sponding time of se arching1The security of X M L dat a ba se should be p aid att ention to1 K ey w ords:Lucene X M L full t ext retrieval efficiency Lucene不是一个完整的全文检索应用程序,而是一个高性能的J a va全文检索工具包,它可以方便地嵌入到各种应用中实现针对应用的全文检索功能。Lucene以其开放源代码的特性、优异的索引结构和良好的系统架构,得到了越来越广泛的应用。 本文使用Lucene设计并实现了一个全文检索系统,与关系数据库相比,采用X M L作为数据存储容器,实现了单个数据库操作,并在大信息量环境下极大地节省了存储空间,提高了检索的速度。 1 系统分析与设计 本文实现的全文跨库检索系统由三大功能模块组成:索引模块、检索模块和存储模块[1]。 111 索引模块 Lucene最核心的特征就在于它特殊的索引结构可以提高检索效率,这也是我们选择Lucene的重要原因。Lucene使用的是倒排文件索引结构,它把每个关键词、关键词在文中出现频率、关键词在文中位置分别作为词典文件(Term Dictionary)、频率文件(Fre quencie s)、位置文件(Po sitions)保存。其中词典文件不仅保存每个关键词,还保留了指向频率文件和位置文件的指针,通过指针可以找到该关键词的频率信息和位置信息。 同时,关键词在索引文件中的排放顺序是按照字符顺序排列的,所以Lucene可以用二元搜索算法快速定位关键词。 另外,Lucene中使用了Field的概念,用于表达信息所在位置(如标题中、文章中、url中),在建立索引时,该Field信息也记录在词典文件中。由于每个关键词一定属于一个或多个Field,所以每个关键词都有一个Field信息。 为了减少索引文件的大小,Lucene对索引还使用了压缩技术,首先,对词典文件中的关键词进行了压缩,关键词压缩为<前缀长度,后缀>;其次,大量用到了对数字的压缩,数字只保存与上一个值的差值。 在维护索引文件时,Lucene与其他B树结构的索引有所不同,它是在扩展索引的时候不断创建新的索引文件,然后定期把这些新的小索引文件合并到原先的大索引中,这样避免了大量的IO操作,在不影响检索效率的前 3本文系国家社科基金重大项目“建设创新型国家的信息服务体制与信息保障体系研究”(项目编号:06&ZD031)课题成果之一。

全文检索功能

在应用中加入全文检索功能 ——基于java的全文索引引擎lucene简介 作者:车东 email: https://www.doczj.com/doc/a65231220.html,/https://www.doczj.com/doc/a65231220.html, 写于:2002/08 最后更新: 版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明 https://www.doczj.com/doc/a65231220.html,/tech/lucene.html 关键词:lucene java full-text search engine chinese word segment 内容摘要: lucene是一个基于java的全文索引工具包。 1.基于java的全文索引引擎lucene简介:关于作者和lucene的历史 2.全文检索的实现:luene全文索引和数据库索引的比较 3.中文切分词机制简介:基于词库和自动切分词算法的比较 4.具体的安装和使用简介:系统结构介绍和演示 5.hacking lucene:简化的查询分析器,删除的实现,定制的排序,应用接口的扩展 6.从lucene我们还可以学到什么 基于java的全文索引/检索引擎——lucene lucene不是一个完整的全文索引应用,而是是一个用java写的全文索引引擎工具包,它可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能。 lucene的作者:lucene的贡献者doug cutting是一位资深全文索引/检索专家,曾经是v-twin搜索引擎(apple的copland操作系统的成就之一)的主要开发者,后在excite担任高级系统架构设计师,目前从事于一些internet底层架构的研究。他贡献出的lucene的目标是为各种中小型应用程序加入全文检索功能。 lucene的发展历程:早先发布在作者自己的https://www.doczj.com/doc/a65231220.html,,后来发布在sourceforge,2001年年底成为apache基金会jakarta的一个子项目:https://www.doczj.com/doc/a65231220.html,/lucene/ 已经有很多java项目都使用了lucene作为其后台的全文索引引擎,比较著名的有: ?jive:web论坛系统; ?eyebrows:邮件列表html归档/浏览/查询系统,本文的主要参考文档“thelucene search engine: powerful, flexible, and free”作者就是eyebrows系统的主要开发者之一,而eyebrows已 经成为目前apache项目的主要邮件列表归档系统。 ?cocoon:基于xml的web发布框架,全文检索部分使用了lucene ?eclipse:基于java的开放开发平台,帮助部分的全文索引使用了lucene

全文检索lucene研究

本文由美白面膜排行榜https://www.doczj.com/doc/a65231220.html,整理 全文检索lucene研究 1 Lucene简介 Lucene是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎。Lucene以其方便使用、快速实施以及灵活性受到广泛的关注。它可以方便地嵌入到各种应用中实现针对应用的全文索引、检索功能,本总结使用lucene3.0.0 2 Lucene 的包结构 1、analysis对需要建立索引的文本进行分词、过滤等操作 2、standard是标准分析器 3、document提供对Document和Field的各种操作的支持。 4、index是最重要的包,用于向Lucene提供建立索引时各种操作的支持 5、queryParser提供检索时的分析支持 6、search负责检索 7、store提供对索引存储的支持 8、util提供一些常用工具类和常量类的支持 Lucene中的类主要组成如下:

1)org.apache.1ucene.analysis语言分析器,主要用于的切词Analyzer是 一个抽象类,管理对文本内容的切分词规则。 2)org.apache.1uceene.document索引存储时的文档结构管理,类似于关系 型数据库的表结构。 3)document包相对而言比较简单,document相对于关系型数据库的记录对 象,Field主要负责字段的管理。 4)org.apache.1ucene.index索引管理,包括索引建立、删除等。索引包是 整个系统核心,全文检索的根本就是为每个切出来的词建索引,查询时就只需要遍历索引,而不需要去正文中遍历,从而极大的提高检索效率。 5)org.apache.1ucene.queryParser查询分析器,实现查询关键词间的运算, 如与、或、非等。 6)org.apache.1ucene.search检索管理,根据查询条件,检索得到结果。 7)org.apache.1ucene.store数据存储管理,主要包括一些底层的I/0操作。 8)org.apache.1ucene.util一些公用类。 3 Document文档 1)void add(Field field) 往Document对象中添加字段 2)void removeField(String name)删除字段。若多个字段以同一个字段 名存在,则删除首先添加的字段;若不存在,则Document保持不变 3)void removeFields(String name)删除所有字段。若字段不存在,则 Document保持不变 4)Field getField(String name)若多个字段以同一个字段名存在,则 返回首先添加的字段;若字段不存在,则Document保持不变 5)Enumeration fields()返回Document对象的所有字段,以枚举类型返 回 6)Field [] getFields(String name)根据名称得到一个Field的数组 7)String [] getValues(String name)根据名称得到一个Field的值的数 组 Document doc1 = new Document();

自然语言处理技术在中文全文检索中的应用

3本文为国家社会科学基金项目“基于中文X ML 文档的全文检索研究”的成果之一,项目编号:04CT Q005。 ●熊回香,夏立新(华中师范大学 信息管理系,湖北 武汉 430079) 自然语言处理技术在中文全文检索中的应用 3 摘 要:自然语言处理技术是中文全文检索的基础。首先介绍了全文检索技术及自然语言处理技术,接着详细地阐述了自然语言处理技术在中文全文检索中的应用,并对目前基于自然语言处理技术的中文全 文检索技术的局限性进行了分析,探讨了中文全文检索技术的未来发展方向。 关键词:自然语言处理;全文检索;智能检索 Abstract:Natural language p r ocessing technol ogy is the basis of Chinese full 2text retrieval .This paper firstly intr oduces the full 2text retrieval technol ogy and natural language p r ocessing technol ogy .Then,it gives a detailed 2descri p ti on of the app licati on of natural language p r ocessing technol ogy in Chinese full 2text retrieval .The p resent li m itati ons of the Chinese full 2text retrieval system based on natural language p r ocessing technol ogy is als o ana 2lyzed .Finally,the paper exp l ores the devel opment trend of Chinese full 2text retrieval technol ogy in future . Keywords:natural language p r ocessing;full text retrieval;intelligent retrieval 随着社会网络化、信息化程度的日益提高,网上信息呈指数级剧增,人们越来越强烈地希望用自然语言同计算机交流,并能方便、快捷、准确地从互联网上获得有价值的信息,因此,自然语言处理技术和中文全文检索技术成为当今计算机科界、语言学界、情报学界共同关注的课题,并共同致力于将自然语言处理技术的研究成果充分运用到全文检索中,从而促进了全文检索技术的发展。 1 全文检索技术 全文检索是一种面向全文和提供全文的检索技术,其核心技术是将文档中所有基本元素的出现信息记录到索引库中,检索时允许用户采用自然语言表达其检索需求,并借助截词、邻词等匹配方法直接查阅文献原文信息,最后将检索结果按相关度排序返回给用户。因而索引数据库的建立是全文检索系统实现的基础,它以特定的结构存储了数据资源的全文信息,从而为全文检索系统提供可检索的数据对象。在中文全文检索系统中,建立索引库的前提是运用自然语言处理技术对中文信息进行基于词(字)、句、段落等更深层次的处理。 2 自然语言处理技术 自然语言是指作者所使用的书面用语,在信息检索中包括关键词、自由词和出现在文献题名、摘要、正文或参 考文献中的具有一定实质意义的词语[1]。自然语言处理 (Natural Language Pr ocessing,NLP )是语言信息处理的一 个重要分支,在我国就是中文信息处理。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法,具体来说就是用计算机对包括汉语(字)的形、音、义等信息及词、句子、篇章的输入、输出、存储和识别、分析、理解、生成等多方面的加工处理[2]。由于自然语言处理侧重于词、句子、篇章,因而词法分析、句法分析、语义分析、语用分析、语境分析便构成了自然语言处理研究内容的基础部分。 211 词法分析 词法分析包括词形和词汇两个层次,其中词形主要是对各种词形和词的可识别部分的处理。如前缀、后缀及复合词的分析;词汇的重点在于复合对词操作和词汇系统的控制。其主要目的是有助于确认词性以及做到部分理解词与词、词与文档之间的关系,提高检索的效率。由于计算机内部存储的中文信息没有明显的词与词之间的分隔符,因此,在中文全文检索系统中,词法分析首要任务之一是对文本信息进行词语切分,即汉语自动分词,汉语自动分词是中文信息处理中的关键技术,也是中文全文检索的瓶颈,只有对汉语词进行正确的切分后,才能准确地提取文献的特征信息,对文献进行正确标引,才能正确分析用户的查询意图,为用户提供准确的信息服务。 212 句法分析 句法分析是对句子中词汇短语进行分析以便揭示句子的语法结构。目的是通过对句型结构的分析,自动抽取复

搜索引擎

李慕红 全球知名搜索引擎介绍 李慕红 https://www.doczj.com/doc/a65231220.html,/mayyenen 2009-07-25 09:06:15 Google https://www.doczj.com/doc/a65231220.html, Google 简介 Google 目前被公认为全球最大的搜索引擎,最优秀的支持多语种的搜索引擎, 提供网站、图像、新闻组等多种资源的查询。包括中文简体、繁体、英语等35个国家和地区的语言的资源。您可以搜索超过 10 亿幅的图片,并能够细读全球最大的 Usenet 消息存档,其中提供的帖子超过 10 亿个,时间可以追溯到 1981 年。Google每天处理的搜索请求已达2亿次!而且这一数字还在不断增长。Google数据库存有42.8亿个Web文件。属于全文(Full Text)搜索引擎。Google成立于1997年,几年间迅速发展成为目前规模最大的搜索引擎,并向AOL、Compuserve、Netscape等其他门户和搜索引擎提供后台网页查询服务。Google借用Dmoz的目录索引提供分类目录查询,但默认网站排列顺序并非按照字母顺序,而是根据网站PageRank的分值高低排列。 Google Inc. 创建于 1998 年 9 月,创始人为斯坦福大学博士生 Larry Page 和 Sergey Brin,他们开发的 Google 搜索引擎屡获殊荣,是一个用来在互联网上搜索信息的简单快捷的工具。Google 的复杂的自动搜索结构设计确保了它绝对诚实公正。 Google 是万维网上最大的搜索引擎,使用户能够访问一个包含超过 80 亿个网址的索引。2000年7月份,Google替代Inktomi成为Yahoo公司的搜索引擎,同年9月份,Google成为中国网易公司的搜索引擎。98年至今,Google已经获得30多项业界大奖。 Google提供常规及高级搜索功能。通过对30 多亿网页进行整理,可为世界各地的用户提供适需的搜索结果,而且搜索时间通常不到半秒。 搜索规则:以关键词搜索时,返回结果中包含全部及部分关键词;短语搜索时默认以精确匹配方式进行;不支持单词多形态(Word Stemming)和断词(Word Truncation)查询;字母无大小写之分,默认全部为小写。 Google一般每隔28天派出“蜘蛛”程序检索现有网站一定IP地址范围内的新网站,而对现有网站的更新则根据该网站的等级不同有快慢之分。一般来说,网站网页等级越高,更新的频率就越快。登录Google的周期一般为3个星期(从提交网站到被索引)。 Google以32%的市场份额高居第一,雅虎则以25%排名第二。如果将所有利用Google服务的合作伙伴如雅虎、AOL和MSN计算在内,Google的市场份额将达到76%,毫无疑问,5年前由美国斯坦福大学两名博士生创办的Google公司,是继比尔·盖茨的"微软帝国"之后,IT业内曝出的又一神话。 数字 搜索的网页:80 亿+ 图片:10 亿+ Usenet 信息:10 亿+ Google 界面的可用语言:100 多种 Google 搜索结果所采用的语言:35 国际域名:100 多个员工:全球 3,000 多人 Google 的含义 “Googol”是一个数学名词,表示一个 1 后面跟着 100 个零。这个词汇是由美国数学家 Edward Kasner 的外甥 Milton Sirotta 创造的,随后通过 Kasner 和 James Newman 合著 的“Mathematics and the Imagination”一书广为流传。Google 使用这一术语体现了公司整合网上海量信息的远大目标。 Google 怎么念 Google进入中国人的视野后,就有了它的中国名,似乎还有不同版本。有的叫“狗狗”,有的叫“古狗”,有的叫“咕狗”,有的叫“孤狗”,有的叫“酷狗”,发音不尽相同。从

相关主题
文本预览
相关文档 最新文档