版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、lucene:基于 java 的全文 索引擎 介lucene是一个基于java的全文索引工具包。lucene1.javalucene2.基于的全文索引引擎简介:关于作者和的历史luene3.全检索的实现:全文索引和数据库索引的比较4.中文切分词机制简介:基于词库和自动切分词算法的比较具体的安装和使用 介:系统结构介绍和演示5. hacking lucene6.lucene:简化的查询分析器,删除的实现,定制的排序,应用接口的扩展从我们还可以学到什么internetlucene担任java/lucene基于的全文索引检索引擎javalucene不是一个完整的全文索引应用,而是是一个用/写的全文索
2、引引擎工具包,它可以方便的嵌入到各种应用中实现针对应用的全文索引 检索功能。/lucenelucenedoug cuttingv-twin的作者:的贡献者是一位资深全文索引检索专家excite,曾经是(applecopland)搜索引擎的操作系统的成就之一的主要开发者,后在高级系统架构设计师,目前从事于一些底层架构的研究。他贡献出的的目标是为各种中小型应用程序加入全文检索功能。sourceforgelucene的发展历程:早先发布在作者自己2001apache基金会jakarta的,年年底成为/lucene/一个子项目
3、:已经有很多java项目都使用了lucene作为其后台的全文索引引擎,比较著名的有: jiveweb:论坛系统;lucene/“thelucene eyebrowshtml/:邮件列表归档 浏览 查询系统,本文参考文档search engine: powerful, flexible, and free”eyebrows作者就是eyebrows发者之一,而apache系统的主要开web已经成为目前项目的主要邮件列表归档系统。 cocoon:xml发布框架,全文检索部分使用了luceneluceneapijava= eclipse:lucene基于的开放开发平台,帮助部分的全文索引使用了luce
4、ne对于中文用户来说,最关心的问题是其是否支持中文的全文检索。但通过后面对于的结构的介绍,你会了解到由于良好架构设计,对中文的支持只需对其语言词法分析接口进行扩展就能实现对中文检索的支持。全文检索的实现机制记录的接口设计的比较通用,输入输出结构都很像数据库的表字/段,所lucene比较一下总以体很上多看传:统可的以应先把用和数据库:的文件、数据当库成等一都个可支以持比全较文方索便引的映数射据到库系统。 的存储结构lucene接口中。lucenelucene数据库索引数据源:索引数据源:doc(field1,field2.)record(field1,field2.)doc(field1,fie
5、ld2.)record(field1.) indexer / sql: insert/_| lucene index| db index|-/ searcher / sql: select 果 出:hits(doc(field1,field2) 果 出:doc(field1.)results(record(field1,field2.)record(field1.)document“”:一个需要进行索引的 单元record一个由多个字段组成:记录,包含多个字段documentfieldfield:字段recordset:字段recordhitsdocument:查询结果集,由多个组 like
6、%keyword%全文检索12, 343,77通常比较厚的书籍后面常常附关键词索引表(比如:北京:页,上海:页它能够帮助读者比较快地找到相关内容的页码。而数据库索引能够大大提高查询的速度原)理,也是一样,想像一下通过书后面的索引查找的速度要比一页一页地翻内容高多少倍而索引之所以效率高,另外一个原因是它是排好序的。对于检索系统来说核心是一个排序问题。由:查询结果集,由匹配的组成like %keyword%成数据库索引不是为全文索引设计的,因此,使用like时,数据库索引是不起作用的,在使用查询时,搜索like过程又变成类似于一页页翻书的遍历过程了,所以对于含有查询的数据库服务来说,其效率也就可想
7、而知了。键词进行模糊匹配:like%keyword1% and like对性%keyword2%能的危害是极大.的。如果是需要对多个关源所(=以比建如立多一篇个文高章效)检排索序系顺统序的存关储键的是同建时立,一有个另类外似一于个科排技好=索序引的一关样键的词反列向表索,引用机于制存,储将关数键据词文章映射关系,利用这样的映射关系索引:关键词出现关键词的文章编号,出现变成多个可以利用索引的精确查询的逻辑组合的过程。从而大大,提检高索了过多程关就键是词把查模询糊的查效询由此可 看出模糊查询相对数据lucene库的精确查询是一个非常不确定的问题,这也是大部分数据最核心的特征是通过特殊的索引结构实现
8、了传统数次数(甚至包括位置:起始偏移量,结束偏移量),出现频率lucene率,所 ,全文检 问题归结到最后是一个排序问题以库对全文检索支持有限的原因。据库不擅长的全文索引机制,并提供了扩展接口,以方便针对不同应用的定制。可以通过一下表格对比一下数据库的模糊查询:数据库全文索引引擎like索引将数据源中的数据都通过全文索引一一建立 是根本用不查grep上询的来。说数,据数需据要传逐统个的便索利引反向索引记录进行对于索引的搜索速度式要的有模多糊个匹数配量,级比的有下like %net%netherlands100会把(term)进行匹配,通过语言分析接使用:like匹配效 通过词元果口的实现,可以
9、实现对中文等非英语的支持。%com%net%的xxx:.net就不.xxx能匹.com配词序颠倒匹配度有匹配度算法,将匹配程度(相似度)比较 net5降。1出现词和出现高的结果排在前面。没有匹配程度的控制:比如有记录中一样的。次的,结果是结果输 通过特别的算法,将最匹配度最高的头出条结果输出,结果集是缓冲式的小批量读取 返多回时的所有(的比结如果上集候,万在)匹需配要条条目大非量常的的。内存存放这些临时结果集。可定制 通制过出不定同合符的应语用言需分要析接的口引实索现规,(可包以则方对便中的括lucene性文的支持)没有接口或接口复杂,无法定制高负载的模糊查询应用,需要负责的模糊查操结论luc
10、ene询的规则,索引的资料量比较大使用率低,模糊匹配规则简单或者需100要模糊查询的资料量少条结果满足98%全文检索和数据库应用最大的不同在于:让最相关的头以上用户的需求的创新之处:bio大部分的搜索(数据库)引擎都是用树结构来维护索引,索引的更新会导致大量的作,不候同不的断更创新建策新在略的实,索现批引中次文,的件对大,此然小稍后可微定以有期调所的整改把)进,这:这些不样新是在的维不小护影索一响引个检文索索件引的合文效并件率到,的原而前先是提的在下大扩,索展提引索高中引了(的索针时引对的效率。/lucene和其他一些全文检索系统 应用的比较:lucene各个种文应档用的没(结有只构定要,义前
11、因具端此体有可的合以数适非据的常源转灵,换活而的器是把适一数应 很多系其他开格统式只文针源档对全文检索系统的网灵页活,性缺。乏其他(append)增量索引和批可以进行增量的索引量索引于大量数据进行批量索引,并且,接可口以设对计 很数多据系时统有只一支源持点批增量加的需索要引也,重有建数据源用于优化批量索引和小批量的增量索引。索引。lucene索引内容抓取lucene据的源文转档换是成由相多应个结字构段)组,成 ,甚 缺乏通用性,往往将文档整个索字至段可不以需控要制索那引些字,近段一需步要索进引行的索字引段,也那分些为需要分词和不需要分词的类型:需要进行分词的索引,比如:标题,文章内容字段/不需
12、要进行分词索引,比如:作者引了日期字段an the of可以 滤掉不需要的词:+ - and orjumps jumped jumper等,西文语法分析:将语言分析通过语言分析器 不同扩展实现:都归结成jump进行索引 检索/非英文支持:对亚洲语言,阿拉伯语言的缺乏通用接口实现索引支持通过查询分的析查接询口语的法实规现则,可:以定制自己查询分析比如:多个关键词之间的关并发访问系等能够支持多用户的使用(word segment)关于亚洲语言的的切分词问题于天中然文通来过说,空全格文分索开引的首,但先亚还洲要语解言决的一中个日语韩言文分语析句的中问的题,字对是于一英个文字来挨说一,个语,句所中有单
13、,首词先之间对是“”要把语句中按 词 进行索引的话,这个词如何切分出来就是一个很大的问题。“”(si-gram)“”首先,肯定不能用单个字符作为索引单元,否则查 上海 时,不能让含有 海上也匹配。“”但一句话: 北京天安门 ,计算机如何按照中文的 言习惯进行切分呢?“”“”北京天安门还是 北京天安门?让计算机能够按照语言习惯进行切分,往往需要机器有比较丰富的词库才能够比较准确的识别出语句中的单词。另外一个解决的办法是采用自动切分算法:将单词按照2元语法(bigram)如:方式切分出来,比 = 北京天安门北京京天天安安门 。这样,在查询的时候,无论是查询北京 还是查询 天安门 and,将查询词组
14、按同样的规则进行切分:北京,天安安门 ,多个关键词之间按与的关系组合,同样能够正确地映射到相基应于的自索动引切中分。的这最种大2方优式点对是于没其有他词亚表洲维语护言成:本韩,实文现,2简日单文,都缺是点通是用索的引。效率低,但对于中小型 用来说,基于 元语法的切分还是够用的。基30%于-40%元切分后的 一般大小和源文件差不多,而对于英文,索引自文动件切一分般只有原文件的 不同,词表切分实现实现非常简单实现复杂查询增加了查询分析的复杂程度,适于实现比较复杂的查询语法规则大30左右存储效率 索引冗余大,索引几乎和原文一样索引效率高,为原文大小的词表维护成本非常高:中日韩等语言需要分维护成本无词
15、表维护成本别维护。http:/jakarta嵌入式系统:./lucene/运行环境资源有限还需要包括词频统计等内容适用领域分布式系统同步问题对查询和存储效率要求高的专业搜索引擎多语言环境:无词表维护成本2目前比较 的搜索引擎的语言分析算法一般是基于以上析算法,大家可以在googlewordsegment search个机制的结合。关于中文的语言分查关键词能找到更多相关的资料。安装和使用下载lucenejavaccjavacc注意:中的一些比较复杂是用生成的(,纯的词法分析:javacompilercompilerjava其中的queryparser生成器),所https:/
16、javacc以如果从源代码.dev编.译java或需.net/要修改、定制自己的词法分析器,还需要从javacc下lucene(index)(search)的组成结构:对于外部应用来说索引模块和检索模块是主要的外部应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.ap
17、ache.lucene.util/底层简单的例子演示一下lucene的使用方法:一些公用的数据结构(path)(body)2索引过程:从field.text(string命令行读name,取文件名(多个),stringvalue)yes将文件分yesyes路径切分词索引字段并和内容存储,比如:标题,字段字段进行存储,并对内容进行全文索引:索引的单位是document对象,每个document个对象包含多个字段field/对象,针对不同的字段属性和数据输出的需求,对字段还可以选择不同的索引 存储字段规则,列表如下:切索存用途方法词引储内容字段metafield.text(string name,
18、 reader value)yesyesno切分词索引不存储,比如:信息,不用于返回显示,但需要进行检索field.keyword(string name, string内容value)noyesyes切分索引并存储,比如:日期字field.unindexed(string name, string段value)nonoyes索引,只存储,比如:文件路径field.unstored(string name, stringyesno只全文索引,不存储value)yespublic class indexfiles /使用方法:: indexfiles 索引 出目 索引的文件列表 .public
19、static void main(string args) throws exception string indexpath = args0;indexwriter writer;/用指定的 言分析器构造一个新的写索引器(第 3 个参数表示是否 追加索引)writer = new indexwriter(indexpath, new simpleanalyzer(), false);for (int i=1; ifield来接受索引的输入,因此输入的数据源可以是:数据库,body文档只要能够设计相应的解析转换器将数据源构造成成(score)path象即可进行索引。对于大批量的数据索引,还可以
20、通过调整public class search 检()来提高批量索引的效率。public static void main(string args) throws exception string indexpath = args0, querystring = args1;过程和结果显示:中的内容。/指向索引目 的搜索器搜索结果返回的是对象,可以通过它再访问searcher searcher = new indexsearcher(indexpath);/ 解析器:使用和 引同 的 言分析器字段和相应查询的匹配度假设根据字段进行全文检索,可以将查询结果的打印出来query, query =
21、queryparser.parse(querystring, body,new simpleanalyzer();/搜索 果使用 hits 存 hits hits = searcher.search(query);/通 hits 可以 到相 字段的数据和 的匹配度for (int i=0; ihits.length(); i+) system.out.println(hits.doc(i).get(path) + ; score: +hits.score(i);在整个检索过程中,语言分析器,查询分析器,甚至搜索器(searcher)都是提供了抽象的接口,可以根据需要进行定制。hacking l
22、ucenelucenejakartaqueryparser个人感觉成为项目后,画在了太多的时间用于调试日趋复杂而其中大部分是大多数用户并不很熟悉的,目前lucene支持的语法:,query := ( clause )*clause := +, - : ( | ( query )简化的查询 析器and or + - &|/询中等间,的个逻人辑感包觉括对于一:般应用来说,等这符些号功,能而有且一还些有华短而语不查实询,和其针实对能西够文实的现前目缀前类模似糊于查googlelucene的查询语句分析功能其实对于大多数用户来说已经够了。所以,queryparser早期版本的仍是比较好的选择。docu
23、ment添加修改删除指定记录()lucene改也似乎提只供能了通索过引记的录扩的展删机除制,然因后此重索新引加的入动实态现id扩。展如应何该删是除没指有定问的题记的录,呢而?指删定除记的录方的法修也很简单, 是需要在索引时根据数据源中的记录id专门另建索引,document然后利用indexreader.delete(termterm)方法通过这个记录根据某个字段值的排序功能删除相应的。lucenescore缺省是按照自己的相关度算法(结果排序是一个在lucene)进行结果排序的,但能够根据其他字段进行score的开发邮件列表中经常提到的问题,很多原先基于数据库应用都何不基于索引的搜索过程效率
24、)都以会外导的致排效序率功非能常。的而低从,全如文果检基索于的其原他理字我段们的可排以序了需解要到在,搜任索但docid这里也score有一个折2中的解决方法:在搜索过score程中能够影响排序结果的只有索引中已经存储的docid以外的排序lucene,其实可以通过将数据源预先排需要除了基于匹配度(搜索结果外对结果再次进hitcollectorindexsearcher.过程中访问存储字段,速度回大大降低,因此非常是不可取的。scorer.score(new hitcollector() 和private float minscore = 0.0f;这个参数,所以,基于public final
25、 void collect(int doc, float score) 好序,然后根据进行排序来实现。这样就避免了在if (score 0.0f &/ ignore zeroed行排序和在搜索过程中访问不在索引中的某个字段值。buckets(bits=null | bits.get(doc) / skip docs not in这里需要修改的是中的过程:bitstotalhits0+;if (score = minscore) /* 原先:lucene 将 docid 和相 的匹配度 score 例入 果命中列表中:* hq.put(new scoredoc(doc, score);/ update hitqueue* 如果用 doc 或 1/doc 代替 score,就 了根据 docid 顺排或逆排* 假 数据源索引 已 按照某个字段排好了序,而 果根据docid 排序也就 了* 某个字段的排序,甚至可以
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 船舶机械装配工发展趋势测试考核试卷含答案
- 陶瓷挤出成型工诚信道德竞赛考核试卷含答案
- 架子工岗前环保及安全考核试卷含答案
- 纤维板工安全素养竞赛考核试卷含答案
- 电子专用设备装调工岗前实践理论考核试卷含答案
- 应急通信管理员岗位学习应用考核试卷含答案
- 信息通信网络线务员冲突解决强化考核试卷含答案
- 空气潜水员岗中核心能力考核试卷含答案
- 化工萃取工操作能力知识考核试卷含答案
- 道路货运汽车驾驶员岗前质量监控考核试卷含答案
- 《TSGD7003-2022压力管道定期检验规则-长输管道》
- 《智能生产线数字化集成与仿真》课件 虚拟生产线认知
- 现代通信系统新技术 (第三版) 课件 第8章 大数据和云计算技术简介
- 政府机关公务车采购投标书
- 影视制作公司影视制作合同
- 夜间飞行的秘密课件
- 宗教民俗+讲解
- 99版-干部履历表-A4打印
- 山东传媒职业学院教师招聘考试题库真题2023
- 青岛胶东国际机场
- 全国优质课人教版小学数学《数与代数》2022新课标(解读)课件
评论
0/150
提交评论