文档库 最新最全的文档下载
当前位置:文档库 › 针对lucene检索结果进行排序

针对lucene检索结果进行排序

针对lucene检索结果进行排序
针对lucene检索结果进行排序

Lucene3.0之结果排序(原理篇)

传统上,人们将信息检索系统返回结果的排序称为"相关排序" ( relevance ranking),隐含其中各条目的顺序反映结果和查询的相关程度。

1、基本排序原理

①向量空间模型

Gerald Salton 等在 30 多年前提出的"向量空间模型" ( Vector Space Model, VSM) [Salton and Lesk,1968, Salton,1971]。该模型的基础是如下假设:文档 d和查询 q的相关性可以由它们包含的共有词汇情况来刻画。

经典的 TF*IDF词项权重的计算公式:

给定某种权重的定量设计,求文档和查询的相关性就变成了

求 d 和 q 向量的

某种距离,最常用的是余弦( cos)距离

②链接分析 PageRank原理

链接分析技术主要基于两个假设: 1)一个网页被多次引用,则它可能是很重要的,如果被重要的网页引用,说明自身也是重要的,网页的重要性在网页之间可以传递。

2)随机冲浪模型:认为假定用户一开始随机地访问网页集合中的一个网页,然和跟随网页的链接向前浏览网页,不会退浏览,那么浏览下一个网页的概率是被浏览网页的量化的重要程度值。

按照以上的用户行为模型,每个网页可能被访问到的次数越多就越重要,这样的"可能被访问的次数"也就定义为网页的权值, PageRank值。如何计算这个权值呢? PageRank采用以下公式进行计算:

其中wj代表第 j个网页的权值;lij只取 0、 1值,代表从网页 i到网页 j 是否存在链接;ni代表网页 i有多少个连向其它网页的链接; d代表"随机冲浪"中沿着链接访问网页的平均次数。选择合适的初始数值,递归的使用上述公式,即可得到理想的网页权值。

2、 Lucene排序计算公式

Lucene的排序公式如下:

1),协调因子,表示文档( d)中 Term(t)出现的百分比,也就

是计算查询条件( q)中不同 Term(t),以及在文档中出现的数量之和,两者的数量之比。通常在文档中出现查询 Term种类越多,分值越高。

2),调节因子,不影响索引排序情况,只在检索时使用,主要是

用来让排序结果在不同的查询条件之间可以比较。这个条件是在搜索时候计算。数值是根据每一个查询项权重的平方和计算得到。计算公式如下:

3) ,文档频率,表示查询词中,每个 Term在对应的结果文档中 (d)

中出现的次数。查询词出现的次数越多,表示出现频率越高,文档的检索得分就越高。为了避免获得更大的相关性函数,实际中,使用次数的平方跟作为文档频率 tf的值,避免数值过度放大。

4) ,逆文档频率,检索匹配文档数量的反向函数。按照信息理论,文档

出现的次数越少,每一篇文档的信息量就会越大。所以匹配的文档数越少,得分就越高。而索引库中文档总数越多,找到一篇目标文档难度越大,相应的信息量也会比较大。

5) ,长度因子,每个索引词汇在域中的总体长度决定的,这个参数在

索引建立时确定。数值根据文档中实际具有的索引项个数确定。检索词长度在文档总长度中占的比例越大,长度因子的数值也越大。

Lucene3.0之结果排序(操作篇)

1、 Lucene相关排序流程

2、 Lucene相关类

① Query类:一个抽象类, Lucene检索结果最终评分的总控制中心。其它评分有关的类和对

象都是由 Query类来管理和生产。

② Weight类接口:定义 Query权重计算的一个实现接口,可以被重用。 Weight类可以用来

生成 Scorer类,也可以解析评分的详细信息,另外还定义了获取 Query权值的方法。

③ Scorer类: Lucene评分机制的核心类。类的定义是抽象类,提供的一些抽象基本的计分

功能方法提供所有的评分类实现,同时还定义了评分的详细解析方法, Scorer类内部有一个

Similarity对象,用来指明计算公式。

④ Scorer类: Lucene相似度计算的核心抽象类。 Similarity类主要处理评分计算,系统

缺省使用类 DefaultSimilarity类对象

3、排序控制

使用 Sort对象定制排序,通过改变文档 Boost值来改变排序结果以及使用自定义的 Similarity方法更改排序

4、文档 Boost加权排序

① Boost是指索引建立过程中,给整篇文档或者文档的某一特定域设定的权值因子,在检索

时,优先返回分数高的。

Document和 Field两重 Boosting参数。通过 Document对象的 setBoost()方法和 Field对象的 setBoost()方法。不同在于前者对文档中每一个域都修改了参数,而后者只针对指定域进行修改。

文档加权 =Document-boosting*Field-boosting,默认情况下为 1,一般不做修改。

② Sort对象检索排序

Sort使用时通过实例化对象作为参数,通过 Searcher类的 search接口来实现。Sort支持的排序功能以文档当中的域为单位,通过这种方法,可以实现一个或者多个不同域的多形式的值排序。

实际使用排序对象 Sort进行排序。主要有两种模式,一种是以字符串表示文档域的名称作为参数指定域排序,一种是直接以排序域的包装域的包装类作为参数进行排序。

Sort对象使用比较简单,只需要在对文档索引进行检索时,在检索器的 Search 方法中带 Sort对象作为参数即可。

1) Sort对象相关性排序

按照相关性排序时最基本的结果排序方法,使用 Sort对象无参数构造函数完成的排序效果相当于 Lucene默认的按相关性降序排序。

2) Sort对象文档编号排序

某些应用场合需要对所有符合匹配度的结果,按照文档内部编号排序输出。使用Sort对象的静态实例 Sort.INDEXORDER来实现

3) Sort对象独立域排序

在检索过程中,把检索结果按照某一个特定域排序,非常重要。在使用搜索引擎过程中,有时会选择使用时间排序,而在搜索引擎库中,检索词完全是另外一个域的内容,与时间没有任何关系。这种应用中,检索关键词的匹配仍然是首

要因素,匹配太低或者不匹配的文档直接不必处理,而匹配的文档则需进一步排序输出。

指定的排序域并没有进行特别限制,可以是检索词的关联域,也可以是文档中的任意其它域。

4) Sort对象联合域排序

多个文档域联合排序时,需要注意文档域的添加次序。排序的结果先按照第一个域排序,然后第二个域作为次要关键字排序。开发时,需要根据自己的需要选择合适的次序。

5) Sort对象逆向排序

Sort(field,true)或者 Sort(field,false)实现升降序排序。

Lucene3.0之结果排序(示例篇)

这个例子是根据《开发自己的搜索引擎:Lucene2.0+Heritrix》中的例子改的,由于原书中是使用Lucene2.0,所以代码有部分改动。

package sortApp;

import java.io.File;

import org.apache.lucene.analysis.standard.StandardAnalyzer;

import org.apache.lucene.document.Document;

import org.apache.lucene.document.Field;

import org.apache.lucene.index.IndexWriter;

import org.apache.lucene.index.Term;

import org.apache.lucene.index.IndexWriter.MaxFieldLength;

import org.apache.lucene.search.IndexSearcher;

import org.apache.lucene.search.ScoreDoc;

import org.apache.lucene.search.Sort;

import org.apache.lucene.search.TermQuery;

import org.apache.lucene.store.Directory;

import org.apache.lucene.store.FSDirectory;

import org.apache.lucene.util.Version;

public class SortTest {

public static void makeItem(IndexWriter writer, String bookNumber,

String bookName, String publishDate) throws Exception {

writer.setUseCompoundFile(false);

Document doc = new Document();

Field f1 = new Field("bookNumber", bookNumber, Field.Store.YES,

Field.Index.NOT_ANALYZED);

Field f2 = new Field("bookName", bookName, Field.Store.YES,

Field.Index.ANALYZED);

Field f3 = new Field("publishDate", publishDate, Field.Store.YES,

Field.Index.NOT_ANALYZED);

doc.add(f1);

doc.add(f2);

doc.add(f3);

writer.addDocument(doc);

}

public static void main(String[] args) {

String Index_Store_Path = "D:/index/1";

File file = new File(Index_Store_Path);

try {

Directory Index = FSDirectory.open(file);

IndexWriter writer = new IndexWriter(Index, new StandardAnalyzer(Version.LUCENE_CURRENT), true,

MaxFieldLength.LIMITED);

writer.setUseCompoundFile(false);

Document doc1 = new Document();

Field f11 = new Field("bookNumber", "0000001", Field.Store.YES, Field.Index.NOT_ANALYZED);

Field f12 = new Field("bookName", "钢铁是怎样炼成的", Field.Store.YES, Field.Index.ANALYZED);

Field f13 = new Field("publishDate", "1970-01-01", Field.Store.YES, Field.Index.NOT_ANALYZED);

doc1.add(f11);

doc1.add(f12);

doc1.add(f13);

Document doc2 = new Document();

Field f21 = new Field("bookNumber", "0000002", Field.Store.YES, Field.Index.NOT_ANALYZED);

Field f22 = new Field("bookName", "钢铁战士", Field.Store.YES, Field.Index.ANALYZED);

Field f23 = new Field("publishDate", "1970-01-01", Field.Store.YES, Field.Index.NOT_ANALYZED);

doc2.add(f21);

doc2.add(f22);

doc2.add(f23);

Document doc3 = new Document();

Field f31 = new Field("bookNumber", "0000003", Field.Store.YES, Field.Index.NOT_ANALYZED);

Field f32 = new Field("bookName", "篱笆女人和狗", Field.Store.YES, Field.Index.ANALYZED);

Field f33 = new Field("publishDate", "1970-01-01", Field.Store.YES, Field.Index.NOT_ANALYZED); doc3.add(f31);

doc3.add(f32);

doc3.add(f33);

Document doc4 = new Document();

Field f41 = new Field("bookNumber", "0000004", Field.Store.YES, Field.Index.NOT_ANALYZED); Field f42 = new Field("bookName", "女人是水做的", Field.Store.YES, Field.Index.ANALYZED); Field f43 = new Field("publishDate", "1970-01-01", Field.Store.YES, Field.Index.NOT_ANALYZED); doc4.add(f41);

doc4.add(f42);

doc4.add(f43);

Document doc5 = new Document();

Field f51 = new Field("bookNumber", "0000005", Field.Store.YES, Field.Index.NOT_ANALYZED); Field f52 = new Field("bookName", "英雄儿女", Field.Store.YES, Field.Index.ANALYZED);

Field f53 = new Field("publishDate", "1970-01-01", Field.Store.YES, Field.Index.NOT_ANALYZED); doc5.add(f51);

doc5.add(f52);

doc5.add(f53);

Document doc6 = new Document();

Field f61 = new Field("bookNumber", "0000006", Field.Store.YES, Field.Index.NOT_ANALYZED); Field f62 = new Field("bookName", "白毛女", Field.Store.YES, Field.Index.ANALYZED);

Field f63 = new Field("publishDate", "1970-01-01", Field.Store.YES, Field.Index.NOT_ANALYZED); doc6.add(f61);

doc6.add(f62);

doc6.add(f63);

Document doc7 = new Document();

Field f71 = new Field("bookNumber", "0000007", Field.Store.YES, Field.Index.NOT_ANALYZED); Field f72 = new Field("bookName", "我的兄弟和女儿", Field.Store.YES, Field.Index.ANALYZED); Field f73 = new Field("publishDate", "1970-01-01", Field.Store.YES, Field.Index.NOT_ANALYZED); doc7.add(f71);

doc7.add(f72);

doc7.add(f73);

writer.addDocument(doc1);

writer.addDocument(doc2);

writer.addDocument(doc3);

writer.addDocument(doc4);

writer.addDocument(doc5);

writer.addDocument(doc6);

writer.addDocument(doc7);

writer.optimize();

writer.close();

IndexSearcher searcher = new IndexSearcher(Index);

TermQuery q = new TermQuery(new Term("bookName", "女"));

ScoreDoc[] hits = searcher.search(q, null, 1000, Sort.RELEVANCE).scoreDocs;

for (int i = 0; i < hits.length; i++) {

Document hitDoc = searcher.doc(hits[i].doc);

System.out.print("书名:");

System.out.println(hitDoc.get("bookName"));

System.out.print("得分:");

System.out.println(hits[i].score);

System.out.print("内部ID :");

System.out.println(hits[i].doc);

System.out.print("书号:");

System.out.println(hitDoc.get("bookNumber"));

System.out.print("发行日期:");

System.out.println(hitDoc.get("publishDate"));

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

运行结果:

Sort属性设为RELEVANCE:

Sort属性设为INDEXORDE:

去除Sort参数后:

全文检索功能

在应用中加入全文检索功能 ——基于java的全文索引引擎lucene简介 作者:车东 email: https://www.wendangku.net/doc/aa12143085.html,/https://www.wendangku.net/doc/aa12143085.html, 写于:2002/08 最后更新: 版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明 https://www.wendangku.net/doc/aa12143085.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.wendangku.net/doc/aa12143085.html,,后来发布在sourceforge,2001年年底成为apache基金会jakarta的一个子项目:https://www.wendangku.net/doc/aa12143085.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版本对比

一、为什么使用lucene 1、Lucene不是一个完整的全文索引应用,而是是一个用JAVA写的全文索引引擎工具包,它可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能。这样的定位,使得lucene有很高的抽象层次,便于扩展和整合到已有的系统。因为对于大多数的全文搜索应用来说,我们需要的是一个开发工具包而不是最终产品(虽然很多搜索引擎也可以扩展特性功能)。这也是程序员最愿意接受的封装层次。 2、Lucene的API接口设计的比较通用,输入输出结构都很像数据库的表==>记录==>字段,所以很多传统的应用的文件、数据库等都可以比较方便的映射到Lucene的存储结构/接口中。(上面语句有些来自在应用中加入全文检索功能——基于JAVA的全文索引引擎Lucene简介)。 二、lucene4.0新特性较重要部分 1、全部使用字节( utf-8 tytes )替代string来构建 term directory 。 带来的好处是:索引文件读取速度 30 倍的提升;占用原来大约10%的内存;搜索过程由于去掉了字符串的转化速度也会明显提升; 但是如果说这上面的好处只是一个副产品,你会怎么想?没错,Mysql有MyIsam,Innodb等诸多引擎供我们选择的,Lucene为什么不能向这个方向发展呢? 实现这个机制的模块叫:Codec (编码器),你可以实现自己的Codec 来进行自定义的扩展,很显然Codec的操作对象是Segment 。

2、支持多线程建索引,支持:concurrent flushing。 了解过Lucene 3.X的同学们都知道,诸如XXXPerThread 的类在建索引的时候已经支持多线程了,但是当每个线程的内存达到指定上限(maxBufferedDocs or ramMaxBufferSizeMB)的时候就需要写到硬盘上,而这个过程仍然不是多线程的,仍然需要一个个排队Flush到硬盘。Lucene 4.0 终于支持 concurrent flushing 了。DocumentsWriterPerThread ,Lucene 4.0 的Concurrent Flushing 正是这个类来实现的。 3、基于有限自动机的模糊匹配算法(FSA算法),FuzzyQuery FuzzyQuery 这类查询估计大家用的比较少。在英文中单词拼写错误,比如: Lucene, Licene , lucen 等就可以用FuzzyQuery来进行查询提高查全率。 在lucene 4.0 之前的FuzzyQuery 的实现非常耗费cpu,实现算法也很暴力。具体过程是:读取每个term,然后计算每个term与查询词的“编辑距离”,如果在指定的范围内则返回。 Lucene 4.0 使用Levenshtein Automaton 的来衡量文字的"编辑距离" ,使用有限状态自动机来进行计算。以数百倍的效率提升了FuzzyQuery 的效率。 三、lucene4.0正式版亮点功能: 一、通过解码器Codec 机制 Lucene 索引格式与Lucene架构解耦,变成了Plugin方式实现,包括:Terms , Postings lists ,Stored 字段,Term Vectors 等都可以以自定义的格式予以支持。正如Mysql支持多种存储引擎一样,现在Lucene也可以了。

一种基于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.wendangku.net/doc/aa12143085.html,

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

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

深入理解lucene原理

深入理解lucene原理 一:什么是索引,为什么需要索引 对非结构化数据也即对全文数据的搜索主要有两种方法: 一种是顺序扫描法(Serial Scanning):所谓顺序扫描,比如要找内容包含某一个字符串的文件,就是一个文档一个文档的看,对于每一个文档,从头看到尾,如果此文档包含此字符串,则此文档为我们要找的文件,接着看下一个文件,直到扫描完所有的文件。如利用windows的搜索也可以搜索文件内容,只是相当的慢。如果你有一个80G硬盘,如果想在上面找到一个内容包含某字符串的文件,不花他几个小时,怕是做不到。Linux下的grep命令也是这一种方式。大家可能觉得这种方法比较原始,但对于小数据量的文件,这种方法还是最直接,最方便的。但是对于大量的文件,这种方法就很慢了。 有人可能会说,对非结构化数据顺序扫描很慢,对结构化数据的搜索却相对较快(由于结构化数据有一定的结构可以采取一定的搜索算法加快速度),那么把我们的非结构化数据想办法弄得有一定结构不就行了吗? 这种想法很天然,却构成了全文检索的基本思路,也即将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。 这部分从非结构化数据中提取出的然后重新组织的信息,我们称之索引 例如:字典,字典的拼音表和部首检字表就相当于字典的索引 二:索引包含哪些东西 其实是由于我们想要搜索的信息和非结构化数据中所存储的信息不一致造成的。

非结构化数据中所存储的信息是每个文件包含哪些字符串,已知文件,欲求字符串相对容易,也即是从文件到字符串的映射。 而我们想搜索的信息是哪些文件包含此字符串,也即已知字符串,欲求文件,也即从字符串到文件的映射。两者恰恰相反。 于是如果索引总能够保存从字符串到文件的映射,则会大大提高搜索速度。 由于从字符串到文件的映射是文件到字符串映射的反向过程,于是保存这种信息的索引称为反向索引。 左边保存的是一系列字符串,称为词典。每个字符串都指向包含此字符串的文档(Document)链表,此文档链表称为倒排表(Posting List)。 三:索引的创建过程 1.全文索引相对于顺序扫描的优势:一次索引,多次使用 2.创建索引的步骤: (1)要索引的原文档 (2)将原文档传给分词组件(Tokenizer) 分词组件会做如下事情:(此过程称为Tokenize) a.将文档分成一个一个的单词 b.去除标点符号 c.去除停词(Stop Word)停词就是语句中无意义的词汇,英语中比如“the”,“a”,“this”等 每一种分词组件(Tokenize)都有一个停词集合 经过分词组件分词后得到的结果称为(词元)Token

Lucene和数据库

全文检索的实现机制 Lucene的API接口设计的比较通用,输入输出结构都很像数据库的表==>记录==>字段,所以很多传统的应用的文件、数据库等都可以比较方便的映射到Lucene的存储结构/接口中。总体上看:可以先把Lucene当成一个支持全文索引的数据库系统。 比较一下Lucene和数据库: Lucene 数据库 索引数据源:doc(field1,field2...) doc(field1,field2...) \ indexer / _____________ | Lucene Index| -------------- / searcher \ 结果输出:Hits(doc(field1,field2) doc(field1...)) 索引数据源: record(field1,field2...) record(field1..) \ SQL: insert/ _____________ | DB Index | ------------- / SQL: select \ 结果输出: results(record(field1,field2..) record(field1...)) Document:一个需要进行索引的“单元” 一个Document由多个字段组成 Record:记录,包含多个字段Field:字段Field:字段 Hits:查询结果集,由匹配的Document组成RecordSet:查询结果集,由多个Record组 成 全文检索≠ like "%keyword%" 通常比较厚的书籍后面常常附关键词索引表(比如:北京:12, 34页,上海:3,77页……),它能够帮助读者比较快地找到相关内容的页码。而数据库索引能够大大提高查询的速度原理也是一样,想像一下通过书后面的索引查找的速度要比一页一页地翻内容高多少倍……而索引之所以效率高,另外一个原因是它是排好序的。对于检索系统来说核心是一个排序问题。 由于数据库索引不是为全文索引设计的,因此,使用like "%keyword%"时,数据库索引是不起作用的,在使用like查询时,搜索过程又变成类似于一页页翻书的遍历过程了,所以对于含有模糊查询的数据库服务来说,LIKE对性能的危害是极大的。如果是需要对多个关键词进行模糊匹配:like"%keyword1%" and like "%keyword2%" ...其效率也就可想而知了。 所以建立一个高效检索系统的关键是建立一个类似于科技索引一样的反向索引机制,将数据源(比如多篇文章)排序顺序存储的同时,有另外一个排好序的关键词列表,用于存储关键词==>文章映射关系,利用这样的映射关系索引:[关键词==>出现关键词的文章编号,出现次数(甚至包括位置:起始偏移量,结束偏移量),出现频率],检索过程就是把模糊查询变成多个可以利用索引的精确查询的逻辑组合的过程。从而大大提高了多关键词查询的效率,所以,全文检索问题归结到最后是一个排序问题。

基于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

用Lucene检索数据库

用Lucene检索数据库 1.写一段传统的JDBC程序,讲每条的用户信息从数据库读取出来 2.针对每条用户记录,建立一个lucene document Document doc = new Document(); 并根据你的需要,将用户信息的各个字段对应luncene document中的field 进行添加,如: doc.add(new Field("NAME","USERNAME",Field.Store.YES,Field.Index.UN_TOKENIZED)); 然后将该条doc加入到索引中,如:luceneWriter.addDocument(doc); 这样就建立了lucene的索引库 3.编写对索引库的搜索程序(看lucene文档),通过对lucene的索引库的查找,你可以快速找到对应记录的ID 4.通过ID到数据库中查找相关记录 用Lucene索引数据库 Lucene,作为一种全文搜索的辅助工具,为我们进行条件搜索,无论是像Google,Baidu 之类的搜索引擎,还是论坛中的搜索功能,还是其它C/S架构的搜索,都带来了极大的便利和比较高的效率。本文主要是利用Lucene对MS Sql Server 2000进行建立索引,然后进行全文索引。至于数据库的内容,可以是网页的内容,还是其它的。本文中数据库的内容是图书馆管理系统中的某个作者表-Authors表。 因为考虑到篇幅的问题,所以该文不会讲的很详细,也不可能讲的很深。 本文以这样的结构进行: 1.介绍数据库中Authors表的结构 2.为数据库建立索引 3.为数据库建立查询功能 4.在web界面下进行查询并显示结果 1.介绍数据库中Authors表的结构 字段名称字段类型字段含义

Lucene简介

在应用中加入全文检索功能 ——基于Java的全文索引引擎Lucene简介 作者:车东 Email: https://www.wendangku.net/doc/aa12143085.html,/https://www.wendangku.net/doc/aa12143085.html, 写于:2002/08 最后更新:09/09/2006 17:09:05 Feed Back >> (Read this before you ask question) 版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明 https://www.wendangku.net/doc/aa12143085.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.wendangku.net/doc/aa12143085.html,,后来发布在SourceForge,2001年年底成为APACHE基金会jakarta的一个子项目:https://www.wendangku.net/doc/aa12143085.html,/lucene/ 已经有很多Java项目都使用了Lucene作为其后台的全文索引引擎,比较著名的有: Jive:WEB论坛系统;

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)课题成果之一。

全文检索lucene研究

本文由美白面膜排行榜https://www.wendangku.net/doc/aa12143085.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();

lucene基础学习

搜索引擎Lucene 第一章Lucene简介 Lucene是apache软件基金会jakarta项目组的一个子项目,是一个开放源代码[的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。 第二章lucene索引的建立 的五个基础类 索引的建立,Lucene 提供了五个基础类,分别是Document, Field, IndexWriter, Analyzer, Directory。以下是他们的用途: Document Document的含义为文档,在Lucene中,它代表一种逻辑文件。Lucene本身无法对物理文件建立索引,而只能识别并处理Document的类型文件。Lucene从Document取出相关的数据源并根据属性配置进行相应的处理。 Field 对象是用来描述一个文档的某个属性的 lucene中的field也具有一些特定的类型如

在中,Field内部包含两个静态的内部类分别是Store和Index详细的描述了Field的属性,它们分别表示Field的储存方式和索引方式。 Store类有3个公有的静态属性: :表示该Field不需要储存。 :表示该Field需要储存。 :表示使用压缩方式来保存这个Field的值。 Index有4个公有的静态属性: :表示该Field不需要索引,也就是用户不需要去查找该Field的值。 :表示该Field先被分词再被索引。 TOKENIZED:表示不对该Field进行分词,但是要对他进行索引,也就是该Field会被用户查找。 :表示对该Field进行索引,但是不使用Analyzer,同时禁止它参加评分,主要是为了减少内存的消耗。 Analyzer

开放源代码的全文检索引擎_Lucene

开放源代码的全文检索引擎 Lucene ――介绍、系统结构与源码实现分析 第一节全文检索系统与Lucene简介 一、什么是全文检索与全文检索系统? 全文检索是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。 全文检索的方法主要分为按字检索和按词检索两种。按字检索是指对于文章中的每一个字都建立索引,检索时将词分解为字的组合。对于各种不同的语言而言,字有不同的含义,比如英文中字与词实际上是合一的,而中文中字与词有很大分别。按词检索指对文章中的词,即语义单位建立索引,检索时按词检索,并且可以处理同义项等。英文等西方文字由于按照空白切分词,因此实现上与按字处理类似,添加同义处理也很容易。中文等东方文字则需要切分字词,以达到按词索引的目的,关于这方面的问题,是当前全文检索技术尤其是中文全文检索技术中的难点,在此不做详述。 全文检索系统是按照全文检索理论建立起来的用于提供全文检索服务的软件系统。一般来说,全文检索需要具备建立索引和提供查询的基本功能,此外现代的全文检索系统还需要具有方便的用户接口、面向WWW[1]的开发接口、二次应用开发接口等等。功能上,全文检索系统核心具有建立索引、处理查询返回结果集、增加索引、优化索引结构等等功能,外围则由各种不同应用具有的功能组成。结构上,全文检索系统核心具有索引引擎、查询引擎、文本分析引擎、对外接口等等,加上各种外围应用系统等等共同构成了全文检索系统。图1.1展示了上述全文检索系统的结构与功能。

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

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明。 https://www.wendangku.net/doc/aa12143085.html,/tech/lucene.html -------------------------------------------------------------------------------- Lucene是一个基于Java的全文索引工具包。 基于Java的全文索引引擎Lucene简介:关于作者和Lucene的历史 全文检索的实现:Luene全文索引和数据库索引的比较 中文切分词机制简介:基于词库和自动切分词算法的比较 具体的安装和使用简介:系统结构介绍和演示 Hacking Lucene:简化的查询分析器,删除的实现,定制的排序,应用接口的扩展 从Lucene我们还可以学到什么 基于Java的全文索引/检索引擎——Lucene Lucene不是一个完整的全文索引应用,而是是一个用Java写的全文索引引擎工具包,它可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能。 Lucene的作者:Lucene的贡献者Doug Cutting是一位资深全文索引/检索专家,曾经是V-Twin 搜索引擎(Apple的Copland操作系统的成就之一)的主要开发者,后在Excite担任高级系统架构设计师,目前从事于一些INTERNET底层架构的研究。他贡献出的Lucene的目标是为各种中小型应用程序加入全文检索功能。 Lucene的发展历程:早先发布在作者自己的https://www.wendangku.net/doc/aa12143085.html,,后来发布在SourceForge,2001年年底成为APACHE基金会jakarta的一个子项目:https://www.wendangku.net/doc/aa12143085.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 的结构的介绍,你会了解到由于Lucene良好架构设计,对中文的支持只需对其语言词法分析接口进行扩展就能实现对中文检索的支持。 全文检索的实现机制 Lucene的API接口设计的比较通用,输入输出结构都很像数据库的表==>记录==>字段,所以很多传统的应用的文件、数据库等都可以比较方便的映射到Lucene的存储结构/接口中。总体上看:可以先把Lucene当成一个支持全文索引的数据库系统。

开放源代码的全文检索引擎 Lucene

开放源代码的全文检索引擎Lucene ――介绍、系统结构与源码实现分析 第一节全文检索系统与Lucene简介 一、什么是全文检索与全文检索系统? 全文检索是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。 全文检索的方法主要分为按字检索和按词检索两种。按字检索是指对于文章中的每一个字都建立索引,检索时将词分解为字的组合。对于各种不同的语言而言,字有不同的含义,比如英文中字与词实际上是合一的,而中文中字与词有很大分别。按词检索指对文章中的词,即语义单位建立索引,检索时按词检索,并且可以处理同义项等。英文等西方文字由于按照空白切分词,因此实现上与按字处理类似,添加同义处理也很容易。中文等文字则需要切分字词,以达到按词索引的目的,关于这方面的问题,是当前全文检索技术尤其是中文全文检索技术中的难点,在此不做详述。 全文检索系统是按照全文检索理论建立起来的用于提供全文检索服务的软件系统。一般来说,全文检索需要具备建立索引和提供查询的基本功能,此外现代的全文检索系统还需要具有方便的用户接口、面向WWW[1]的开发接口、二次应用开发接口等等。功能上,全文检索系统核心具有建立索引、处理查询返回结果集、增加索引、优化索引结构等等功能,外围则由各种不同应用具有的功能组成。结构上,全文检索系统核心具有索引引擎、查询引擎、文本分析引擎、对外接口等等,加上各种外围应用系统等等共同构成了全文检索系统。图1.1展示了上述全文检索系统的结构与功能。

相关文档