开发自己的搜索引擎lucene20heritrix.doc
文档标题PAGE1OF40开发自己的搜索引擎LUCENE20HERITRIX发布日期–08/04/2010DOCUMENTIDHZ_RD_MAG_DOC_CONCEPT_01_20100804PROJECTRELEASE01FEATURECONCEPTDOCSUBSYSTEMSCENARIOSDISTRIBUTETOMAGTEAM文档标题PAGE2OF401概述使用LUCENSE进行搜索、排序、过滤和分页,LUCENE的分析器,对WORD,EXCEL,PDF格式文档的处理,COMPASS搜索引擎框,LUCENE分布式和GOOGLESEARCHAPI,爬虫HERITRIXHTMLPARSER,DWR内容,最后一个垂直商用企业搜索引擎实例。11LUCENE版本历史2302008年1月更新为2302402008年10月更新为2402412009年5月更新为2412902009年9月25号更新为2902912009年11月6号更新为2913002009年11月25号更新为3003012010年2月26号更新为3013022010年6月18号更新为3023032010年12月3号更新为3033302011年7月初更新为3303402011年9月14日更新为3403502011年11月26日更新为350现在也许是试试SPHINX的时候了相比LUCENE速度更快,有中文分词的支持,而且内置了对简单的分布式检索的支持;由于数据库索引不是为全文索引设计的,因此,使用LIKE“KEYWORD“时,数据库索引是不起作用的,在使用LIKE查询时,搜索过程又变成类似于一页页翻书的遍历过程了,所以对于含有模糊查询的数据库服务来说,LIKE对性能的危害是极大的。如果是需要对多个关键词进行模糊匹配LIKE“KEYWORD1“ANDLIKE“KEYWORD2“其效率也就可想而知了。所以建立一个高效检索系统的关键是建立一个类似于科技索引一样的反向索引机制,将数据源(比如多篇文章)排序顺序存储的同时,有另外一个排好序的关键词列表,用于存储关键词文章映射关系,利用这样的映射关系索引关键词出现关键词的文章编号,出现次数(甚至包括位置起始偏移量,结束偏移量),出现频率,检索过程就是把模糊查询变成多个可以利用索引的精确查询的逻辑组合的过程。从而大大提高了多关键词查询的效率,所以,全文检索问题归结到最后是一个排序问题。由此可以看出模糊查询相对数据库的精确查询是一个非常不确定的问题,这也是大部分数据库对全文检索支持有限的原因。LUCENE最核心的特征是通过特殊的索引结构实现了传统数据库不擅长的全文索引机制,并提供了扩展接口,以方便针对不同应用的定制。LUCENE的创新之处大部分的搜索(数据库)引擎都是用B树结构来维护索引,索引的更新会导致大量的IO操作,LUCENE在实现中,对此稍微有所改进不是维护一个索引文件,而是在扩展索引的时候不断创建新的索引文件,然后定期的把这些新的小索引文件合并到原先的大索引中(针对不同的更新策略,批次的大小可以调整),这样在不影响检索的效率的前提下,提高了索引的效率。12WHATISAPACHELUCENETHEAPACHELUCENE™PROJECTDEVELOPSOPENSOURCESEARCHSOFTWARE,INCLUDINGAPACHELUCENECORE™ERLYNAMEDLUCENEJAVA,OURFLAGSHIPSUBPROJECT,PROVIDESAJAVABASEDINDEXINGANDSEARCHIMPLEMENTATION,ASWELLASSPELLCHECKING,HITHIGHLIGHTINGANDADVANCEDANALYSIS/TOKENIZATIONCAPABILITIES文档标题PAGE3OF40APACHESOLR™ISOURHIGHPERANCEENTERPRISESEARCHSERVER,WITHXML/HTTPANDJSON/PYTHON/RUBYAPIS,HITHIGHLIGHTING,FACETEDSEARCH,CACHING,REPLICATION,DISTRIBUTEDSEARCH,DATABASEINTEGRATION,WEBADMINANDSEARCHINTERFACESAPACHEPYLUCENE™ISAPYTHONPORTOFTHETHELUCENECOREPROJECTAPACHEOPENRELEVANCEPROJECT™ISASUBPROJECTWITHTHEAIMOFCOLLECTINGANDDISTRIBUTINGFREEMATERIALSFORRELEVANCETESTINGANDPERANCE13下载网址HTTP//LUCENEAPACHEORG/LUCENECANBEDOWNLOADEDFROMHTTP//WWWAPACHEORG/DYN/CLOSERCGI/LUCENE/JAVA/ANDSOLRCANBEDOWNLOADEDFROMHTTP//WWWAPACHEORG/DYN/CLOSERCGI/LUCENE/SOLR/HTTP//LUCENEAPACHEORG/JAVA/3_5_0/API/ALL/INDEXHTMLHTTP//LUCENEAPACHEORG/SOLR/API/INDEXHTML14倒排索引定义当使用倒排方式后,不再有整页整页的信息了,信息被分割成一个个的关键字,并辅以关键字在原书中的页数,而构成一个倒排基本单位。从理论上说,倒排是一种面向单词的索引机制。通常,它有词(关键字)和出现情况两部分组成。特点关键字表受到实际语言因索的限制,它的增长率在文本数据库到一定规模后可以忽略不计,有人做过统计,对于1GB的文本信息,词汇表大小在5MB左右。15DOCUMENT逻辑文件任何与索引文档相关的操作都是在DOCUMENT和FIELD的基础上完成的,在LUCENE中DOCUMENT代表一种逻辑文件。2对WORD、EXCEL和PDF的处理21PDFBOXPDFBOX,但与LUCENE结合需要160中的源码去深研一下,LUCENEPDFBOXDOCUEMTN没有在其JAR包中。HTTP//PDFBOXAPACHEORG/XPDF支持中文22POI对EXCEL的处理类POI37JAR包HTTP//POIAPACHEORG/对WORD的处理类POI学提供了对WORD格式文件的读取。文档标题PAGE4OF40但在它的发行版本中没有发布对WORD支持的模块,需要另外下载一个POI的扩展JAR包,TMEXTRACTORS04较老了,用POISCRATCHPAD3720101029处理WORD文档使用JACOB来处理文档JAVACOMBRIDGEJACOBDLL,机器上必须装有OFFICE软件。3COMPASSLUCENE只是强大的API,COMPASS是一套使用了LUCENE的搜索引擎框架,它提供了一套开源的,高性能的、可灵活配置的搜索框架,可为用户的应用程序提供搜索功能,不仅如此,它还可以同SPRING,HIBERNATE等已有框架集成。INORDERTOADDCOMPASS,EDITYOURPOMXMLF