当前位置:文档之家› Lucene:基于Java的全文检索引擎简介

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

Lucene:基于Java的全文检索引擎简介
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/468350521.html,

匹配度有匹配度算法,将匹配程度(相似度)比较高的结果排在前面。没有匹配程度的控制:比如有记录中net出现5词和出现1次的,结果是一样的。

结果输出通过特别的算法,将最匹配度最高的头100条结果

输出,结果集是缓冲式的小批量读取的。

返回所有的结果集,在匹配条目非常多的

时候(比如上万条)需要大量的内存存放

这些临时结果集。

可定制性通过不同的语言分析接口实现,可以方便的定制出

符合应用需要的索引规则(包括对中文的支持)没有接口或接口复杂,无法定制

结论高负载的模糊查询应用,需要负责的模糊查询的规则,索引的资料量比较大使用率低,模糊匹配规则简单或者需要模糊查询的资料量少

全文检索和数据库应用最大的不同在于:让最相关的头100条结果满足98%以上用户的需求

Lucene的创新之处:

大部分的搜索(数据库)引擎都是用B树结构来维护索引,索引的更新会导致大量的IO操作,Lucene在实现中,对此稍微有所改进:不是维护一个索引文件,而是在扩展索引的时候不断创建新的索引文件,然后定期的把这些新的小索引文件合并到原先的大索引中(针对不同的更新策略,批次的大小可以调整),这样在不影响检索的效率的前提下,提高了索引的效率。

Lucene和其他一些全文检索系统/应用的比较:

Lucene其他开源全文检索系统

增量索引和批量索引可以进行增量的索引(Append),可以对于大量

数据进行批量索引,并且接口设计用于优化批

量索引和小批量的增量索引。

很多系统只支持批量的索引,有时数

据源有一点增加也需要重建索引。

数据源Lucene没有定义具体的数据源,而是一个文档

的结构,因此可以非常灵活的适应各种应用

(只要前端有合适的转换器把数据源转换成相

应结构),

很多系统只针对网页,缺乏其他格式

文档的灵活性。

索引内容抓取Lucene的文档是由多个字段组成的,甚至可以

控制那些字段需要进行索引,那些字段不需要

索引,近一步索引的字段也分为需要分词和不

需要分词的类型:

需要进行分词的索引,比如:标题,文章内

容字段

不需要进行分词的索引,比如:作者/日期

字段

缺乏通用性,往往将文档整个索引了

org.apache.Lucene.document/存储结构

org.apache.Lucene.store/ 底层IO/存储结构

org.apache.Lucene.util/一些公用的数据结构

简单的例子演示一下Lucene的使用方法:

索引过程:从命令行读取文件名(多个),将文件分路径(path字段)和内容(body字段)2个字段进行存储,并对内容进行全文索引:索引的单位是Document对象,每个Document对象包含多个字段Field对象,针对不同的字段属性和数据输出的需求,对字段还可以选择不同的索引/存储字段规则,列表如下:

方法切词索引存储用途

Field.Text(String name, String value)Yes Yes Yes切分词索引并存储,比如:标题,内容字段Field.Text(String name, Reader value)Yes Yes No切分词索引不存储,比如:META信息,

不用于返回显示,但需要进行检索内容Field.Keyword(String name, String value)No Yes Yes不切分索引并存储,比如:日期字段Field.UnIndexed(String name, String

不索引,只存储,比如:文件路径value)No No Yes

Field.UnStored(String name, String value)Yes Yes No只全文索引,不存储

public class IndexFiles {

//使用方法:: IndexFiles [索引输出目录] [索引的文件列表] ...

public static void main(String[] args) throws Exception {

String indexPath = args[0];

IndexWriter writer;

//用指定的语言分析器构造一个新的写索引器(第3个参数表示是否为追加索引)

writer = new IndexWriter(indexPath, new SimpleAnalyzer(), false);

for (int i=1; i

System.out.println("Indexing file " + args[i]);

InputStream is = new FileInputStream(args[i]);

//构造包含2个字段Field的Document对象

//一个是路径path字段,不索引,只存储

//一个是内容body字段,进行全文索引,并存储

Document doc = new Document();

doc.add(Field.UnIndexed("path", args[i]));

doc.add(Field.Text("body", (Reader) new InputStreamReader(is)));

//将文档写入索引

writer.addDocument(doc);

is.close();

};

//关闭写索引器

writer.close();

}

}

索引过程中可以看到:

语言分析器提供了抽象的接口,因此语言分析(Analyser)是可以定制的,虽然lucene缺省提供了2个比较通用的分析器SimpleAnalyser和StandardAnalyser,这2个分析器缺省都不支持中文,所以要加入对中文语言的切分规则,需要修改这2个分析器。

Lucene并没有规定数据源的格式,而只提供了一个通用的结构(Document对象)来接受索引的输入,因此输入的数据源可以是:数据库,WORD文档,PDF文档,HTML文档……只要能够设计相应的解析转换器将数据源构造成成Docuement对象即可进行索引。

对于大批量的数据索引,还可以通过调整IndexerWrite的文件合并频率属性(mergeFactor)来提高批量索引的效率。

检索过程和结果显示:

搜索结果返回的是Hits对象,可以通过它再访问Document==>Field中的内容。

假设根据body字段进行全文检索,可以将查询结果的path字段和相应查询的匹配度(score)打印出来,

public class Search {

public static void main(String[] args) throws Exception {

String indexPath = args[0], queryString = args[1];

//指向索引目录的搜索器

Searcher searcher = new IndexSearcher(indexPath);

//查询解析器:使用和索引同样的语言分析器

Query query = QueryParser.parse(queryString, "body",

new SimpleAnalyzer());

//搜索结果使用Hits存储

Hits hits = searcher.search(query);

//通过hits可以访问到相应字段的数据和查询的匹配度

for (int i=0; i

System.out.println(hits.doc(i).get("path") + "; Score: " +

hits.score(i));

};

}

}

在整个检索过程中,语言分析器,查询分析器,甚至搜索器(Searcher)都是提供了抽象的接口,可以根据需要进行定制。

Hacking Lucene

简化的查询分析器

个人感觉lucene成为JAKARTA项目后,画在了太多的时间用于调试日趋复杂QueryParser,而其中大部分是大多数用户并不很熟悉的,目前LUCENE支持的语法:

Query ::= ( Clause )*

Clause ::= ["+", "-"] [ ":"] ( | "(" Query ")")

中间的逻辑包括:and or + - &&||等符号,而且还有"短语查询"和针对西文的前缀/模糊查询等,个人感觉对于一般应用来说,这些功能有一些华而不实,其实能够实现目前类似于Google的查询语句分析功能其实对于大多数用户来说已经够了。所以,Lucene早期版本的QueryParser仍是比较好的选择。

添加修改删除指定记录(Document)

Lucene提供了索引的扩展机制,因此索引的动态扩展应该是没有问题的,而指定记录的修改也似乎只能通过记录的删除,然后重新加入实现。如何删除指定的记录呢?删除的方法也很简单,只是需要在索引时根据数据源中的记录ID专门另建索引,然后利用IndexReader.delete(Termterm)方法通过这个记录ID删除相应的Document。

根据某个字段值的排序功能

lucene缺省是按照自己的相关度算法(score)进行结果排序的,但能够根据其他字段进行结果排序是一个在LUCENE的开发邮件列表中经常提到的问题,很多原先基于数据库应用都需要除了基于匹配度(score)以外的排序功能。而从全文检索的原理我们可以了解到,任何不基于索引的搜索过程效率都会导致效率非常的低,如果基于其他字段的排序需要在搜索过程中访问存储字段,速度回大大降低,因此非常是不可取的。

但这里也有一个折中的解决方法:在搜索过程中能够影响排序结果的只有索引中已经存储的docID和score这2个参数,所以,基于score以外的排序,其实可以通过将数据源预先排好序,然后根据docID进行排序来实现。这样就避免了

在LUCENE搜索结果外对结果再次进行排序和在搜索过程中访问不在索引中的某个字段值。

这里需要修改的是IndexSearcher中的HitCollector过程:

...

scorer.score(new HitCollector() {

private float minScore = 0.0f;

public final void collect(int doc, float score) {

if (score > 0.0f && // ignore zeroed buckets

(bits==null || bits.get(doc))) { // skip docs not in bits

totalHits[0]++;

常用的26条学术搜索引擎

常用的26条学术搜索引擎 学术搜索是一项免费服务,可以帮助快速寻找学术资料,如专家评审文献、论文、书籍、预印本、摘要以及技术报告。这里为你介绍26个学术搜索引擎。 1、 Google 学术搜索 虽然还是Beta版,但个人已觉得现在已经是很好很强大了,Google学术搜索滤掉了普通搜索结果中大量的垃圾信息,排列出文章的不同版本以及被其它文章的引用次数。略显不足的是,它搜索出来的结果没有按照权威度(譬如影响因子、引用次数)依次排列,在中国搜索出来的,前几页可能大部分为中文的一些期刊的文章。 2、Scirus学术搜索 Scirus是目前互联网上最全面、综合性最强的科技文献搜索引擎之一,其口号为“for scientific informationonly”。它由Elsevier科学出版社开发,用于搜索期刊和专利,效果很不错!Scirus覆盖的学科范围包括:农业与生物学,天文学,生物科学,化学与化工,计算机科学,地球与行星科学,经济、金融与管理科学,工程、能源与技术,环境科学,语言学,法学,生命科学,材料科学,数学,医学,神经系统科学,药理学,物理学,心理学,社会与行为科学,社会学等。 3、Base学术搜索 BASE是德国比勒费尔德(Bielefeld)大学图书馆开发的一个多学科的学术搜索引擎,提供对全球异构学术资源的集成检索服务。它整合了德国比勒费尔德大学图书馆的图书馆目录和大约160个开放资源(超过200 万个文档)的数据。 4、Vascoda Vascoda是一个交叉学科门户网站的原型,它注重特定主题的聚合,集成了图书馆的收藏、文献数据库和附加的学术内容。 5、Goole 与google比较了一下发现,能搜索到一些google搜索不到的好东东。它界面简洁,功能强大,速度快,YAHOO、网易都采用了它的搜索技术。各位可以一试。 6、A9

一种基于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/468350521.html,

中外搜索引擎研究的现状与发展

中外搜索引擎研究的现状与发展 夏旭李健康 (第一军医大学图书馆广州510515) 摘要: 以WWW网络搜索引擎的发展历程为基础,综述了WWW网络搜索引擎的定义、检索机制、检索规则、词表应用、分类研究、比较研究等方面取得的新进展,探讨搜索引擎发展走向与思路。同时就目前中外搜索引擎普遍存在的问题进行分析,希能对国内中文搜索引擎的开发和准确、快速、全面检索WWW网络乃至因特网信息资源有所启示。 关键词:搜索引擎研究进展综述信息资源管理 由于因特网上信息资源内容广泛、时效性强、访问快速、网络交互搜寻、动态更新,而且还提供快速访问网上信息资源的各种搜索引擎(Search Engines),用于快速搜索WWW网络乃至因特上的有用信息,使得通过WWW网络获取网络信息资源成为国内外研究的一大热点。基于网络的搜索引擎的研制与开发应用成为当前网络信息资源开发应用研究领域的热点。英文搜索引擎“GOOGLE”和中文搜索引擎“百度搜索”的推出,拉开了搜索引擎核心技术争夺战的序幕。可以预言,在今后一段相当长的时间里,搜索引擎还将有长足的发展和进步,检索功能将更趋向于集成化和更具亲和力、更显人性化。 1 搜索引擎的定义、检索机制、检索规则和词表应用 1.1 定义 搜索引擎,Search engines,又称搜索机,Web搜索器,是伴随WWW网络出现的检索网上信息资源的新工具。实质上是一种网页网址检索系统,有的提供分类和关键词检索途径,有的仅提供关键词检索途径。它根据检索规则和从其他信息服务器上得到数据并对数据进行加工处理,自动建立索引,并通过检索接口为用户提供信息查询服务,能够自动对WWW资源建立索引或进行主题分类,并通过查询语法为用户返回匹配资源的系统。搜索引擎主要是由Crawler、Spider、Worm、Robot等计算机软件程序自动在因特网上漫游,不断搜集各类新网址及网页,形成数以千万甚至上亿条记录的数据库。它是通过采集标引众多网络站点来提供全局性网络资源控制与检索机制、将全球WWW网络中所有信息资源作一完整的集合、整理和分类、方便用户查找所需信息的网络检索软件。具有检索面广、信息量大、信息更新速度快,特定主题的检索专指性强等特点。 1.1.1 常规搜索引擎和元搜索引擎 自带索引数据库的搜索引擎通常被称为常规搜索引擎或独立搜索引擎,相应地,集多种常规搜索引擎于一体的搜索引擎则称为(多)元搜索引擎。元搜索引擎是国外搜索引擎开发者新设计的一种集成型搜索引擎,与独立搜索引擎的区别在于:它是通过一个统一的用户界面帮助用户在多个独立搜索引擎中选择和利用合适的搜索引擎,甚至是同时利用多个搜索引擎来实现检索操作。元搜索引擎没有自己独立的数据库,却更多地提供统一界面,形成一个由多个搜索引擎构成的具有独立功能的虚拟逻辑体,通过元搜索引擎的功能实现对这个虚拟逻辑体中各搜索引擎数据库的查询等一切操作。由于元搜索引擎预先配置好多个搜索引擎,每条检索指令都自动通过预先配置的搜索引擎执行,免去了用户逐一记忆和单独使用每个搜索引擎的麻烦。主要的元搜索引擎有ALL-IN-ONE、CUSI、Fun City Web Search、HyperNews、Linksearch、Savvysearch、Metacrawler、Best Search、W3Search Engines、WebSearch、Profusion、Mamma、Avenuesearch、Dogpile、Kwikseek、Findspot、Bytesearch、Webferret、Bluesquirrel Webseeker等。Metacrawler (http://www. https://www.doczj.com/doc/468350521.html,)能同时调用6个搜索引擎;Savvysearch (http://www. https://www.doczj.com/doc/468350521.html,)可有选择地调用21个独立的搜索引擎,检索Web、Usenet 新闻组、软件、参考工具、技术报告等信息,每次最多并行检索5个搜索引擎的数据库。Profusion (http://www. https://www.doczj.com/doc/468350521.html,)最多同时调用9个独立的搜索引擎,调用方式有全部调用、系统自动选择最好的3个、系统自动选择最快的3个、用户从中选取任意个搜索引擎。最新出现的桌面型离线式搜索引擎如Webcompass、WebSeeker、WebFerret、Echosearch、Copernic98等也是元搜索引擎。 1.1.2 集中式搜索引擎和分布式搜索引擎

当今搜索引擎技术及发展趋势

当今搜索引擎技术及发展趋势 随着互联网的迅猛发展、WEB信息的增加,用户要在信息海洋里查找信息,就象大海捞针一样,搜索引擎技术恰好解决了这一难题(它可以为用户提供信息检索服务)。目前,搜索引擎技术正成为计算机工业界和学术界争相研究、开发的对象。 搜索引擎(Search Engine)是随着WEB信息的迅速增加,从1995年开始逐渐发展起来的技术。据发表在《科学》杂志1999年7月的文章《WEB信息的可访问性》估计,全球目前的网页超过8亿,有效数据超过9T,并且仍以每4个月翻一番的速度增长。用户要在如此浩瀚的信息海洋里寻找信息,必然会“大海捞针”无功而返。搜索引擎正是为了解决这个“迷航”问题而出现的技术。 搜索引擎以一定的策略在互联网中搜集、发现信息,对信息进行理解、提取、组织和处理,并为用户提供检索服务,从而起到信息导航的目的。搜索引擎提供的导航服务已经成为互联网上非常重要的网络服务,搜索引擎站点也被美誉为“网络门户”。搜索引擎技术因而成为计算机工业界和学术界争相研究、开发的对象。 一、分类 按照信息搜集方法和服务提供方式的不同,搜索引擎系统可以分为三大类: 1.目录式搜索引擎:以人工方式或半自动方式搜集信息,由编辑员查看信息之后,人工形成信息摘要,并将信息置于事先确定的分类框架中。信息大多面向网站,提供目录浏览服务和直接检索服务。该类搜索引擎因为加入了人的智能,所以信息准确、导航质量高,缺点是需要人工介入、维护量大、信息量少、信息更新不及时。这类搜索引擎的代表是:Yahoo、LookSmart、Open Directory、Go Guide等。2.机器人搜索引擎:由一个称为蜘蛛(Spider)的机器人程序以某种策略自动地在互联网中搜集和发现信息,由索引器为搜集到的信息建立索引,由检索器根据用户的查询输入检索索引库,并将查询结果返回给用户。服务方式是面向网页的全文检索服务。该类搜索引擎的优点是信息量大、更新及时、毋需人工干预,缺点是返回信息过多,有很多无关信息,用户必须从结果中进行筛选。这类搜索引擎的代表是:AltaVista、Northern Light、Excite、Infoseek、Inktomi、FAST、Lycos、Google;国内代表为:“天网”、悠游、OpenFind等。 3.元搜索引擎:这类搜索引擎没有自己的数据,而是将用户的查询请求同时向多个搜索引擎递交,将返回的结果进行重复排除、重新排序等处理后,作为自己的结果返回给用户。服务方式为面向网页的全文检索。这类搜索引擎的优点是返回结果的信息量更大、更全,缺点是不能够充分使用所使用搜索引擎的功能,用户需要做更多的筛选。 二、性能指标 我们可以将WEB信息的搜索看作一个信息检索问题,即在由WEB网页组成的文档库中检索出与用户查询相关的文档。所以我们可以用衡量传统信息检索系统的性能参数-召回率(Recall)和精度(Pricision)衡量一个搜索引擎的性能。 召回率是检索出的相关文档数和文档库中所有的相关文档数的比率,衡量的是检索系统(搜索引擎)的查全率;精度是检索出的相关文档数与检索出的文档总数的比率,衡量的是检索系统(搜索引擎)的查准率。对于一个检索系统来讲,召回率和精度不可能两全其美:召回率高时,精度低,精度高时,召回率低。所以常常用11种召回率下11种精度的平均值(即11点平均精度)来衡量一个检索系统的精度。对于搜索引擎系统来讲,因为没有一个搜索引擎系统能够搜集到所有的WEB网页,所以召回率很难计算。目前的搜索引擎系统都非常关心精度。 影响一个搜索引擎系统的性能有很多因素,最主要的是信息检索模型,包括文档和查询的表示方法、评价文档和用户查询相关性的匹配策略、查询结果的排序方法和用户进行相关度反馈的机制

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/468350521.html, 匹配度有匹配度算法,将匹配程度(相似度)比较高的结果排在前面。没有匹配程度的控制:比如有记录中net出现5词和出现1次的,结果是一样的。 结果输出通过特别的算法,将最匹配度最高的头100条结果 输出,结果集是缓冲式的小批量读取的。 返回所有的结果集,在匹配条目非常多的 时候(比如上万条)需要大量的内存存放 这些临时结果集。 可定制性通过不同的语言分析接口实现,可以方便的定制出 符合应用需要的索引规则(包括对中文的支持)没有接口或接口复杂,无法定制 结论高负载的模糊查询应用,需要负责的模糊查询的规则,索引的资料量比较大使用率低,模糊匹配规则简单或者需要模糊查询的资料量少 全文检索和数据库应用最大的不同在于:让最相关的头100条结果满足98%以上用户的需求 Lucene的创新之处: 大部分的搜索(数据库)引擎都是用B树结构来维护索引,索引的更新会导致大量的IO操作,Lucene在实现中,对此稍微有所改进:不是维护一个索引文件,而是在扩展索引的时候不断创建新的索引文件,然后定期的把这些新的小索引文件合并到原先的大索引中(针对不同的更新策略,批次的大小可以调整),这样在不影响检索的效率的前提下,提高了索引的效率。 Lucene和其他一些全文检索系统/应用的比较: Lucene其他开源全文检索系统 增量索引和批量索引可以进行增量的索引(Append),可以对于大量 数据进行批量索引,并且接口设计用于优化批 量索引和小批量的增量索引。 很多系统只支持批量的索引,有时数 据源有一点增加也需要重建索引。 数据源Lucene没有定义具体的数据源,而是一个文档 的结构,因此可以非常灵活的适应各种应用 (只要前端有合适的转换器把数据源转换成相 应结构), 很多系统只针对网页,缺乏其他格式 文档的灵活性。 索引内容抓取Lucene的文档是由多个字段组成的,甚至可以 控制那些字段需要进行索引,那些字段不需要 索引,近一步索引的字段也分为需要分词和不 需要分词的类型: 需要进行分词的索引,比如:标题,文章内 容字段 不需要进行分词的索引,比如:作者/日期 字段 缺乏通用性,往往将文档整个索引了

如何测试搜索引擎的索引量大小

如何测试搜索引擎的索引量大小(前篇) 背景知识:搜索引擎的质量指标一般包括相关性(Relevance)、时效性(Freshness)、全面性(Comprehensiveness)和可用性(Usability)等四个方面,今天我们要谈的索引量就属于完整性指标的范畴。 首先需要注意的是,对于搜索引擎,网页的索引量和抓取量是不同的概念。搜索引擎的网页抓取数量一般都要远大于索引量,因为抓取的网页中包括很多内容重复或者作弊等质量不高的网页。搜索引擎需要根据算法从抓取的网页当中取其精华,去其糟粕,挑选出有价值的网页进行索引。因此,对用户而言,搜索引擎的索引量大小才更有意义。 其次,无限制增大索引量并不一定能保证搜索质量的提升。一方面,在全面性指标中,除索引量外,还需要考虑到收录网页的质量和不同类型网页的分布。另一方面,搜索引擎的质量指标体系要保证四方面的均衡发展,不是依靠单个指标的突破就可以改善的。目前包括雅虎中国在内的主流中文搜索引擎的网页索引量都在20 亿量级,基本上可以满足用户的日常查询需求。 然而,由于从外部无法直接测算出搜索引擎网页索引量的绝对值大小,很多搜索引擎服务商喜欢对外夸大自己的收录网页数,作为市场噱头。从1998年开始,Krishna Bharat和Andrei Broder就开始研究,如何通过第三方来客观比较不同搜索引擎索引量的大小。8年后,在今年5月份的WWW2006大会上,来自以色列的Ziv Bar-Yossef和Maxim Gurevich由于这方面的出色研究成果夺得了大会唯一的最佳论文奖。他们的研究算出了主流英文搜索引擎的索引量相对大小:雅虎是Google的1.28倍,Google是MSN的1.36倍。他们是如何算出这些数字的呢?下面我们将为搜索引擎爱好者介绍这个算法,以及探讨在中文搜索引擎上是如何应用的。 概述 搜索引擎的索引量或称覆盖率对搜索结果的相关性、时效性和找到率都具有深远的影响。出于市场运作的考虑,各大互联网搜索引擎不时对外公布自己索引的文档数量,然而这些数据往往不同程度地被加入了一些水份,可信度上有一个问号。因此,如何通过搜索引擎的公共接口,也就是通常所说的搜索框,比较客观、准确地测试它的索引量就成为了一个令人关注的问题。 图1 对搜索引擎的索引采样

六大搜索引擎的比较

一、界面、广告以及速度搜索引擎在我们日常操作中的使用频率非常高,大家使用它的目的都非常明确,就是用它来搜寻需要的内容,而不会为搜索引擎的页面做过多的停留,因此搜索引擎的界面设计和速度就对我们的使用产生不小的影响,下面来看看这六款搜索引擎在界面和速度上的表现。谷歌、百度和微软的Live Search,这三大搜索引擎的界面大家都已经相当熟悉,它们有着共同的特点,就是简洁至极:网站LOGO、搜索框和按钮以及个别功能服务链接,除此以外,页面上就没有其他多余和花哨的东西了,给人的感觉非常清爽,界面一目了然,特别是Live Search在不失简洁的同时还通过一些小脚本和背景图片使得页面整体更加美观。三者使用起来都很方便,并且首页界面上没有任何第三方的广告。搜索结果页面,三者同样是采用简洁的风格,页面左侧排列着搜索结果,百度搜索结果页面右侧有不少广告,谷歌视关键词的不同也可能出现右侧广告。 Live Search的界面十分简洁且美观 百度搜索结果页面右侧的广告与上面三者相比,雅虎全能搜在界面上显得更为活泼、色彩更加多样,并且在首页内容上也更丰富。首页上除了常规的搜索所需组成部分外,雅虎全能搜还加入了天气预报、邮箱登录的显示区域。虽然这些占据了一点点页面,但是它们功能实用且不影响正常使用。雅虎全能搜的搜索主页 搜狗搜索的界面可谓结合了谷歌和Live Search:在布局上

与谷歌类似,而在细节上与Live Search有着异曲同工之妙;而搜索新军——网易有道的界面与谷歌、百度站在同一阵线,风格、版式都十分一致。在搜索结果页面中,搜狗搜索页面左侧有少量广告。总的来说,六款搜索引擎的界面设计都比较合理、美观、大方。雅虎全能搜的界面稍有不同,加入了天气预报和邮箱模块,而其他五款都尽量精简,其中谷歌、百度和有道趋于一致,采用最简的风格,而Live Search和搜狗在首页的一些细节上多加以了一些修饰。此外,值得一提的是一些搜索引擎对于Logo文化的重视,在传统的节日或者一些特殊的纪念日时都会将首页的Logo徽标换成与该日子相关的设计。其中在这方面要数谷歌和百度做得最为出色:无论是三八节、五一节这样的国际节日,或者情人节、万圣节这样的西方舶来物,还是春节、清明、端午等传统的中国农历节日,谷歌和百度都会精心设计相应的节日Logo;此外,谷歌在一些特殊的纪念日,如达芬奇诞辰、地球日之类的纪念日也会推出专门的徽标;而百度近期开始定期在首页推出一个搜索封面人物,以此反映对互联网时代风云人物的价值取向,十分有特色。雅虎和搜狗在节日Logo设计方面也有所表现,在节日时也可经常看到其专门的徽标;网易有道正式版新近推出不久,我们还无法对其在特殊Logo的设计上是否会有所表现作出评价。搜索引擎的特色Logo其实并不仅仅是一个单纯的设计,它还有更多的作用:它承载了一种信息,传达了搜索引擎提供商对于创新、

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

全文搜索引擎和目录搜索引擎区别

实验一:全文搜索引擎和目录索引引擎的区别是什么? 全文搜索引擎因为依靠软件进行,所以数据库的容量非常庞大,但是,它的查询结果往往不够准确。 分类目录依靠人工收集和整理网站,能够提供更为准确的查询结果,但收集的内容却非常有限。 1搜索引擎属于自动网站检索,而目录索引则完全依赖手工操作。 2搜索引擎收录网站时,只要网站本身没有违反有关的规则,一般都能登录成功;而目录索引对网站的要求则高得多,有时即使登录多次也不一定成功。 3当用于在登录搜索引擎时,我们一般不用考虑网站的分类问题,而登录目录索引时则必须将网站放在一个最合适的目录(Directory)。 4搜索引擎中各网站的有关信息都是从用户网页中自动提取的,所以用户的角度看,我们拥有更多的自主权;而目录索引则要求必须手工另外填写网站信息,而且还有各种各样的限制。因此,分类目录型搜索引擎营销方法与技术性搜索引擎的方式有很大的不同,需要充分了解这种区别,才能充分发挥各种不同搜索引擎的作用。 实验二:百度的广告策略如何策划的。谈谈你的看法。 百度的广告策略主要是通过搜索推广、网盟推广、增值服务(百度指数、百度统计、百度推广助手、百度商桥)、其他推广服务(百度图片推广、百度品牌专区、百度火爆地带)、专业客户服务等几项来进行的。 百度推广流程是: 1. 搜索:网民在百度搜索自己关注的关键词信息 2. 推广:企业的推广信息展现在关键词对应的搜索结果页 3. 点击:用户点击推广信息进入企业网站 4. 成交:通过沟通了解,双方达成交易 百度将互联网众多内容网站整合,建立了国内最具实力的联盟体系;百度联盟囊括了24个行业类别的优质网站,加盟合作网站累计超过30万家,影响力覆盖95%以上的中国网民。 百度品牌专区是在网页搜索结果最上方为著名品牌量身定制的资讯发布平台,是为提升网民搜索体验而整合文字、图片、视频等多种展现结果的创新搜索模式。 百度火爆地带是一种针对特定关键词的网络推广方式,按时间段固定付费,出现在百度网页搜索结果第一页的右侧,不同位置价格不同。 百度图片推广是一种针对特定关键词的网络推广方式,按时间段固定付费,出现在百度图片搜索结果第一页的结果区域,不同词汇价格不同。企业购买了图片推广关键词后,就会被主动查找这些关键词的用户找到并向其展示企业推广图片,给企业带来商业机会! 实验三:各个搜索引擎对同类网站的收录情况是否相同?如果不相同,各个搜索引擎有什么特点? 各个搜索引擎对同类网站的收录情况不尽相同。百度与谷歌属于全文引擎搜索,其网页数据库的更新速度也不相同,但收录网页数与更新的速度是谷歌比百度更快,内容更丰富。而雅

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

搜索引擎

搜索引擎分析 在当今的社会,上网成为了我们大部分人每天必不可少的一部分,网络具有太多的诱惑和开发的潜力,查询资料,消遣娱乐等等,但是这些大部分都离不开搜索引擎技术的应用。今天在我的这篇论文里将会对搜索引擎进行一个分析和相关知识的概括。就如大家所知道的互联网发展早期,以雅虎为代表的网站分类目录查询非常流行。网站分类目录由人工整理维护,精选互联网上的优秀网站,并简要描述,分类放置到不同目录下。用户查询时,通过一层层的点击来查找自己想找的网站。也有人把这种基于目录的检索服务网站称为搜索引擎,但从严格意义上讲,它并不是搜索引擎。1990年,加拿大麦吉尔大学计算机学院的师生开发出Archie。当时,万维网还没有出现,人们通过FTP来共享交流资源。Archie能定期搜集并分析FTP服务器上的文件名信息,提供查找分别在各个FTP主机中的文件。用户必须输入精确的文件名进行搜索,Archie告诉用户哪个FTP服务器能下载该文件。虽然Archie搜集的信息资源不是网页,但和搜索引擎的基本工作方式是一样的:自动搜集信息资源、建立索引、提供检索服务。所以,Archie被公认为现代搜索引擎的鼻祖。 搜索引擎是指根据一定的策略、运用特定的计算机程序从互联网上搜集信息,在对信息进行组织和处理后,为用户提供检索服务,将用户检索相关的信息展示给用户的系统。搜索引擎包括全文索

引、目录索引、元搜索引擎、垂直搜索引擎、集合式搜索引擎、门户搜索引擎与免费链接列表等。百度和谷歌等是搜索引擎的代表。那么搜索引擎将来的发展方向和发展的前景又是如何?我们就先从以下的各类主流搜索引擎先进行一个大致的分析。 1.全文索引 全文搜索引擎是当今主要网络搜素时所应用的搜索引擎,在网络上也是大家所熟知的,比如google和百度都是我们平时经常使用的。它们从互联网提取各个网站的信息,建立起数据库,并能检索与用户查询条件相匹配的记录,按一定的排列顺序返回结果。根据搜索结果来源的不同,全文搜索引擎可分为两类,一类拥有自己的检索程序,俗称“蜘蛛”程序或“机器人”程序,能自建网页数据库,搜索结果直接从自身的数据库中调用,上面提到的Google 和百度就属于这种类型;另一类则是租用其他搜索引擎的数据库,并按自定的格式排列搜索结果,如Lycos搜索引擎。在搜索引擎分类部分提到过全文搜索引擎从网站提取信息建立网页数据库的概念。搜索引擎的自动信息搜集功能分两种。一种是定期搜索,就是每隔一段时间,搜索引擎就会发启“蜘蛛”程序,对一定IP 地址范围内的互联网站进行检索,一旦发现新的网站,它会自动提取网站的信息和网址加入自己的数据库。而另一种是提交网站搜索,即网站拥有者主动向搜索引擎提交网址,它在一定时间内定向向你的网站派出“蜘蛛”程序,扫描你的网站并将有关信息存入数据库,以备用户查询。由于近年来搜索引擎索引规则发生很

搜索引擎的设计与实现

web搜索引擎的设计与实现

摘要 随着网络的迅猛发展。网络成为信息的极其重要的来源地,越来越多的人从网络上获取自己所需要的信息,这就使得像Google[40],百度[39]这样的通用搜索引擎变成了人们寻找信息必不可少的工具。 本文在深入研究了通用搜索引擎基本原理、架构设计和核心技术的基础上,结合小型搜索引擎的需求,参照了天网,lucene等搜索引擎的原理,构建了一个运行稳定,性能良好而且可扩充的小型搜索引擎系统,本文不仅仅完成了对整个系统的设计,并且完成了所有的编码工作。 本文论述了搜索引擎的开发背景以及搜索引擎的历史和发展趋势,分析了小型搜索引擎的需求,对系统开发中的一些问题,都给出了解决方案,并对方案进行详细设计,编码实现。论文的主要工作及创新如下: 1.在深刻理解网络爬虫的工作原理的基础上,使用数据库的来实现爬虫部分。 2.在深刻理解了中文切词原理的基础之上,对lucene的切词算法上做出了改进的基础上设计了自己的算法,对改进后的算法实现,并进行了准确率和效率的测试,证明在效率上确实提高。 3.在理解了排序索引部分的原理之后,设计了实现索引排序部分结构,完成了详细流程图和编码实现,对完成的代码进行测试。 4.在完成搜索部分设计后,觉得效率上还不能够达到系统的要求,于是为了提高系统的搜索效率,采用了缓存搜索页面和对搜索频率较高词语结果缓存的两级缓存原则来提高系统搜索效率。 关键词:搜索引擎,网络爬虫,中文切词,排序索引

ABSTRACT With the rapidly developing of the network. Network became a vital information source, more and more people are obtaining the information that they need from the network,this making web search engine has become essential tool to people when they want to find some information from internet. In this paper, with in-depth study of the basic principles of general search engines, the design and core technology architecture, combining with the needs of small search engine and in the light of the "tianwang", lucene search engine, I build a stable, good performance and can be expanded small-scale search engine system, this article not only completed the design of the entire system, but also basically completed all the coding work. This article describle not only the background of search engines, but also the history of search engine developing and developing trends,and analyse the needs of small search engines and giving solutionsthe to the problems which was found in the development of the system ,and making a detailed program design, coding to achieve. The main thesis of the article and innovation are as follows: 1.with the deep understanding of the working principle of the network spider.I acheived network spider with using database system. 2.with the deep understanding of Chinese segmentation and segmentation algorithm of lucene system,I made my own segmentation algorithm,and give a lot of tests to my segmentation algorithm to provide that my segmentation algorithm is better. 3.with the deep understanding of sorted and index algorithm,I designed my own sorted and index algorithm with the data-struct I designed and coding it ,it was provided available after lots of tests. 4.after design of search part,I foud the efficiency of the part is not very poor,so I designed two-stage cache device to impove the efficiency of the system. Key words: search engine,net spider, Chinese segmentation,sorted and index

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