小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Lucene

 王者歸來525 2011-04-05

Lucene

百科名片

Lucene是apache軟件基金會(huì)4 jakarta項(xiàng)目組的一個(gè)子項(xiàng)目,是一個(gè)開放源代碼的全文檢索引擎工具包,即它不是一個(gè)完整的全文檢索引擎,而是一個(gè)全文檢索引擎的架構(gòu),提供了完整的查詢引擎和索引引擎,部分文本分析引擎(英文與德文兩種西方語言)。Lucene的目的是為軟件開發(fā)人員提供一個(gè)簡(jiǎn)單易用的工具包,以方便的在目標(biāo)系統(tǒng)中實(shí)現(xiàn)全文檢索的功能,或者是以此為基礎(chǔ)建立起完整的全文檢索引擎。

目錄

創(chuàng)始人
歷史
特點(diǎn)及優(yōu)勢(shì)
  1. 突出的優(yōu)點(diǎn)
  2. 前提
  3. 建立索引
  4. 搜索
展開
  

編輯本段創(chuàng)始人

  Lucene的原作者是Doug Cutting,他是一位資深全文索引/檢索專家,曾經(jīng)是V-Twin搜索引擎[6]的主要開發(fā)者,后在Excite[7]擔(dān)任高級(jí)系統(tǒng)架構(gòu)設(shè)計(jì)師,目前從事于一些Internet底層架構(gòu)的研究。早先發(fā)布在作者自己的,后來發(fā)布在SourceForge[8],2001年年底成為apache軟件基金會(huì)jakarta的一個(gè)子項(xiàng)目。

編輯本段歷史

  Lucene最初是由Doug Cutting開發(fā)的,在SourceForge的網(wǎng)站上提供下載。在2001年9月做為高質(zhì)量的開源Java產(chǎn)品加入到Apache軟件基金會(huì)的 Jakarta家族中。隨著每個(gè)版本的發(fā)布,這個(gè)項(xiàng)目得到 明顯的增強(qiáng),也吸引了更多的用戶和開發(fā)人員。2004年7月,Lucen e1.4版正式發(fā)布,10月的1.4.2版本做了一次bug修正。表1.1顯示了Lucene的發(fā)布?xì)v史。
  版本 發(fā)布日期 里程碑
  0.01 2000年3月 第一個(gè)開源版本(SourceForge)
  1.0 2000年10月
  1.01b 2001年7月 最后的SourceForge版本
  1.2 2002年6月 第一個(gè)Apache Jakarta版本
  1.3 2003年12月 復(fù)合索引格式,查詢分析器增加,遠(yuǎn)程搜索,token定位,可擴(kuò)展的API
  1.4 2004年7月 Sorting, span queries, term vectors
  1.4.1 2004年8月 排序性能的bug修正
  1.4.2 2004年10月 IndexSearcher optimization and misc. fixes
  1.4.3 2004年冬 Misc. fixes2.4.1 2009年3月8日發(fā)布新版本
  2.3.0 2008年1月 更新為2.3.0
  2.4.0 2008年10月 更新為2.4.0
  2.4.1 2009年 5月 更新為 2.4.1
  2.9.0 2009年9月25號(hào) 更新為2.9.0
  2.9.1 2009年11月6號(hào) 更新為2.9.1
  3.0.0 2009年11月25號(hào) 更新為3.0.0
  3.0.1 2010年2月26號(hào) 更新為3.0.1
  3.0.2 2010年6月18號(hào) 更新為3.0.2
  3.0.3 2010年12月3號(hào) 更新為3.0.3

編輯本段特點(diǎn)及優(yōu)勢(shì)

  作為一個(gè)開放源代碼項(xiàng)目,Lucene從問世之后,引發(fā)了開放源代碼社群的巨大反響,程序員們不僅使用它構(gòu)建具體的全文檢索應(yīng)用,而且將之集成到各種系統(tǒng)軟件中去,以及構(gòu)建Web應(yīng)用,甚至某些商業(yè)軟件也采用了Lucene作為其內(nèi)部全文檢索子系統(tǒng)的核心。apache軟件基金會(huì)的網(wǎng)站使用了Lucene作為全文檢索的引擎,IBM的開源軟件eclipse[9]的2.1版本中也采用了Lucene作為幫助子系統(tǒng)的全文索引引擎,相應(yīng)的IBM的商業(yè)軟件Web Sphere[10]中也采用了Lucene。Lucene以其開放源代碼的特性、優(yōu)異的索引結(jié)構(gòu)、良好的系統(tǒng)架構(gòu)獲得了越來越多的應(yīng)用。
  Lucene是一個(gè)高性能、可伸縮的信息搜索(IR)庫。它使你可以為你的應(yīng)用程序添加索引和搜索能力。Lucene是用java實(shí)現(xiàn)的成熟的、免費(fèi)的開源項(xiàng)目,是著名的Apache Jakarta大家庭的一員,并且基于在Apache軟件許可 [ASF, License]。同樣,Lucene是當(dāng)前與近幾年內(nèi)非常流行的免費(fèi)的Java信息搜索(IR)庫。

突出的優(yōu)點(diǎn)

  Lucene作為一個(gè)全文檢索引擎,其具有如下突出的優(yōu)點(diǎn):
 ?。?)索引文件格式獨(dú)立于應(yīng)用平臺(tái)。Lucene定義了一套以8位字節(jié)為基礎(chǔ)的索引文件格式,使得兼容系統(tǒng)或者不同平臺(tái)的應(yīng)用能夠共享建立的索引文件。
  (2)在傳統(tǒng)全文檢索引擎的倒排索引的基礎(chǔ)上,實(shí)現(xiàn)了分塊索引,能夠針對(duì)新的文件建立小文件索引,提升索引速度。然后通過與原有索引的合并,達(dá)到優(yōu)化的目的。
 ?。?)優(yōu)秀的面向?qū)ο蟮南到y(tǒng)架構(gòu),使得對(duì)于Lucene擴(kuò)展的學(xué)習(xí)難度降低,方便擴(kuò)充新功能。
 ?。?)設(shè)計(jì)了獨(dú)立于語言和文件格式的文本分析接口,索引器通過接受Token流完成索引文件的創(chuàng)立,用戶擴(kuò)展新的語言和文件格式,只需要實(shí)現(xiàn)文本分析的接口。
  (5)已經(jīng)默認(rèn)實(shí)現(xiàn)了一套強(qiáng)大的查詢引擎,用戶無需自己編寫代碼即使系統(tǒng)可獲得強(qiáng)大的查詢能力,Lucene的查詢實(shí)現(xiàn)中默認(rèn)實(shí)現(xiàn)了布爾操作、模糊查詢(Fuzzy Search[11])、分組查詢等等。
  面對(duì)已經(jīng)存在的商業(yè)全文檢索引擎,Lucene也具有相當(dāng)?shù)膬?yōu)勢(shì)。
  首先,它的開發(fā)源代碼發(fā)行方式(遵守Apache Software License[12]),在此基礎(chǔ)上程序員不僅僅可以充分的利用Lucene所提供的強(qiáng)大功能,而且可以深入細(xì)致的學(xué)習(xí)到全文檢索引擎制作技術(shù)和面相對(duì)象編程的實(shí)踐,進(jìn)而在此基礎(chǔ)上根據(jù)應(yīng)用的實(shí)際情況編寫出更好的更適合當(dāng)前應(yīng)用的全文檢索引擎。在這一點(diǎn)上,商業(yè)軟件的靈活性遠(yuǎn)遠(yuǎn)不及Lucene。
  其次,Lucene秉承了開放源代碼一貫的架構(gòu)優(yōu)良的優(yōu)勢(shì),設(shè)計(jì)了一個(gè)合理而極具擴(kuò)充能力的面向?qū)ο蠹軜?gòu),程序員可以在Lucene的基礎(chǔ)上擴(kuò)充各種功能,比如擴(kuò)充中文處理能力,從文本擴(kuò)充到HTML、PDF[13]等等文本格式的處理,編寫這些擴(kuò)展的功能不僅僅不復(fù)雜,而且由于Lucene恰當(dāng)合理的對(duì)系統(tǒng)設(shè)備做了程序上的抽象,擴(kuò)展的功能也能輕易的達(dá)到跨平臺(tái)的能力。
  最后,轉(zhuǎn)移到apache軟件基金會(huì)后,借助于apache軟件基金會(huì)的網(wǎng)絡(luò)平臺(tái),程序員可以方便的和開發(fā)者、其它程序員交流,促成資源的共享,甚至直接獲得已經(jīng)編寫完備的擴(kuò)充功能。最后,雖然Lucene使用Java語言寫成,但是開放源代碼社區(qū)的程序員正在不懈的將之使用各種傳統(tǒng)語言實(shí)現(xiàn)(例如.net framework[14]),在遵守Lucene索引文件格式的基礎(chǔ)上,使得Lucene能夠運(yùn)行在各種各樣的平臺(tái)上,系統(tǒng)管理員可以根據(jù)當(dāng)前的平臺(tái)適合的語言來合理的選擇。
  如何用java實(shí)現(xiàn)lucene(只使用,不求甚解版-_-")

前提

  lucene有7個(gè)包需要導(dǎo)入:analysis,document,index,queryParser,search,store,util

建立索引

  IndexWriter writer = new IndexWriter("E:/index", new StandardAnalyze(),true,MaxFieldLength.UNLIMITED); //true代表覆蓋原先數(shù)據(jù),maxFieldLength用來限制Field的大小
  Document doc = new Document();
  doc.add(new Field("title", "lucene introduction", Field.Store.YES, Field.Index.ANALYZED,
  Field.TermVector.WITH_POSITIONS_OFFSETS));
  doc.add(new Field("time", "60", Field.Store.YES, Field.Index.ANALYZED,
  Field.TermVector.WITH_POSITIONS_OFFSETS));
  writer.addDocument(doc);
  writer.optimize(); //優(yōu)化
  writer.close();

搜索

  IndexSearcher searcher= new IndexSearcher("E:/index") Query query = new TermQuery(new Term("title", "lucene"));//單個(gè)字節(jié)查詢
  //Query query = new FuzzyQuery(new Term("title", "lucena"));//模糊查詢
  //Query query = new WildcardQuery(new Term("title", "lu*"));// 通配符查詢 ?代表一個(gè)字符,*代表0到多個(gè)字符
  //BooleanQuery query = new BooleanQuery();//條件查詢
  //BooleanQuery qson1 = new BooleanQuery();
  //Query q1 = new TermQuery(new Term("title", "lucene"));
  //qson1.add(q1, Occur.MUST);//MUST是必須滿足的
  //BooleanQuery qson2 = new BooleanQuery();
  //Query q2= new TermQuery(new Term("sex", "woman"));
  //qson2 .add(qson1, Occur.MUST_NOT);//MUST_NOT是必須不滿足
  //query.add(qson1, Occur.SHOULD);
  //query.add(qson2, Occur.SHOULD);//SHOULD代表滿足qson1或者滿足qson2都可以
  //PhraseQuery query = new PhraseQuery();//近距離查詢
  //query.setSlop(5);//距離設(shè)置為5
  //query.add(new Term("title", "lucene"));
  //query.add(new Term("title", "introduction"));//查詢出title中l(wèi)ucene和introduction距離不超過5個(gè)字符的結(jié)果
  //Query query = new PrefixQuery(new Term("title", "lu"));//WildcardQuery的lu*一樣
  //RangeQuery query = new RangeQuery(new Term("time", "50"),new Term("time", "60"), true);
  //true代表[50,60],false代表(50,60)
  Hits hits = searcher.search(query);
  for (int i = 0; i < hits.length(); i++) {
  Document d = hits.doc(i);
  String title= d.get("title");
  System.out.print(title+ " ");
  }
  這樣,基本上就可以使用了
  注:以上代碼為lucene早些版本的寫法。lucene3.02的寫法有所改變。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多