日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

lucene简单实例

發(fā)布時(shí)間:2025/3/16 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 lucene简单实例 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

寫(xiě)文章的時(shí)候,感覺(jué)比較難寫(xiě)的就是標(biāo)題,有時(shí)候不知道起什么名字好,反正這里寫(xiě)的都是關(guān)于lucene的一些簡(jiǎn)單的實(shí)例,就隨便起啦.?

Lucene 其實(shí)很簡(jiǎn)單的,它最主要就是做兩件事:建立索引和進(jìn)行搜索?
來(lái)看一些在lucene中使用的術(shù)語(yǔ),這里并不打算作詳細(xì)的介紹,只是點(diǎn)一下而已----因?yàn)檫@一個(gè)世界有一種好東西,叫搜索。?

IndexWriter:lucene中最重要的的類(lèi)之一,它主要是用來(lái)將文檔加入索引,同時(shí)控制索引過(guò)程中的一些參數(shù)使用。?

Analyzer:分析器,主要用于分析搜索引擎遇到的各種文本。常用的有StandardAnalyzer分析器,StopAnalyzer分析器,WhitespaceAnalyzer分析器等。?

Directory:索引存放的位置;lucene提供了兩種索引存放的位置,一種是磁盤(pán),一種是內(nèi)存。一般情況將索引放在磁盤(pán)上;相應(yīng)地lucene提供了FSDirectory和RAMDirectory兩個(gè)類(lèi)。?

Document:文檔;Document相當(dāng)于一個(gè)要進(jìn)行索引的單元,任何可以想要被索引的文件都必須轉(zhuǎn)化為Document對(duì)象才能進(jìn)行索引。?

Field:字段。?

IndexSearcher:是lucene中最基本的檢索工具,所有的檢索都會(huì)用到IndexSearcher工具;?

Query:查詢,lucene中支持模糊查詢,語(yǔ)義查詢,短語(yǔ)查詢,組合查詢等等,如有TermQuery,BooleanQuery,RangeQuery,WildcardQuery等一些類(lèi)。?

QueryParser: 是一個(gè)解析用戶輸入的工具,可以通過(guò)掃描用戶輸入的字符串,生成Query對(duì)象。?

Hits:在搜索完成之后,需要把搜索結(jié)果返回并顯示給用戶,只有這樣才算是完成搜索的目的。在lucene中,搜索的結(jié)果的集合是用Hits類(lèi)的實(shí)例來(lái)表示的。?

上面作了一大堆名詞解釋,下面就看幾個(gè)簡(jiǎn)單的實(shí)例吧:?
1、簡(jiǎn)單的的StandardAnalyzer測(cè)試?yán)?/p> Java代碼?

  • package?lighter.javaeye.com;??
  • ??
  • import?java.io.IOException;??
  • import?java.io.StringReader;??
  • ??
  • import?org.apache.lucene.analysis.Analyzer;??
  • import?org.apache.lucene.analysis.Token;??
  • import?org.apache.lucene.analysis.TokenStream;??
  • import?org.apache.lucene.analysis.standard.StandardAnalyzer;??
  • ??
  • public?class?StandardAnalyzerTest???
  • {??
  • ????//構(gòu)造函數(shù),??
  • ????public?StandardAnalyzerTest()??
  • ????{??
  • ????}??
  • ????public?static?void?main(String[]?args)???
  • ????{??
  • ????????//生成一個(gè)StandardAnalyzer對(duì)象??
  • ????????Analyzer?aAnalyzer?=?new?StandardAnalyzer();??
  • ????????//測(cè)試字符串??
  • ????????StringReader?sr?=?new?StringReader("lighter?javaeye?com?is?the?are?on");??
  • ????????//生成TokenStream對(duì)象??
  • ????????TokenStream?ts?=?aAnalyzer.tokenStream("name",?sr);???
  • ????????try?{??
  • ????????????int?i=0;??
  • ????????????Token?t?=?ts.next();??
  • ????????????while(t!=null)??
  • ????????????{??
  • ????????????????//輔助輸出時(shí)顯示行號(hào)??
  • ????????????????i++;??
  • ????????????????//輸出處理后的字符??
  • ????????????????System.out.println("第"+i+"行:"+t.termText());??
  • ????????????????//取得下一個(gè)字符??
  • ????????????????t=ts.next();??
  • ????????????}??
  • ????????}?catch?(IOException?e)?{??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ????}??
  • }??

  • 顯示結(jié)果:?

    引用 第1行:lighter?
    第2行:javaeye?
    第3行:com


    提示一下:?
    StandardAnalyzer是lucene中內(nèi)置的"標(biāo)準(zhǔn)分析器",可以做如下功能:?
    1、對(duì)原有句子按照空格進(jìn)行了分詞?
    2、所有的大寫(xiě)字母都可以能轉(zhuǎn)換為小寫(xiě)的字母?
    3、可以去掉一些沒(méi)有用處的單詞,例如"is","the","are"等單詞,也刪除了所有的標(biāo)點(diǎn)?
    查看一下結(jié)果與"new StringReader("lighter javaeye com is the are on")"作一個(gè)比較就清楚明了。?
    這里不對(duì)其API進(jìn)行解釋了,具體見(jiàn)lucene的官方文檔。需要注意一點(diǎn),這里的代碼使用的是lucene2的API,與1.43版有一些明顯的差別。?

    2、看另一個(gè)實(shí)例,簡(jiǎn)單地建立索引,進(jìn)行搜索?

    Java代碼?
  • package?lighter.javaeye.com;??
  • 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.queryParser.QueryParser;??
  • import?org.apache.lucene.search.Hits;??
  • import?org.apache.lucene.search.IndexSearcher;??
  • import?org.apache.lucene.search.Query;??
  • import?org.apache.lucene.store.FSDirectory;??
  • ??
  • public?class?FSDirectoryTest?{??
  • ??
  • ????//建立索引的路徑??
  • ????public?static?final?String?path?=?"c://index2";??
  • ??
  • ????public?static?void?main(String[]?args)?throws?Exception?{??
  • ????????Document?doc1?=?new?Document();??
  • ????????doc1.add(?new?Field("name",?"lighter?javaeye?com",Field.Store.YES,Field.Index.TOKENIZED));??
  • ??
  • ????????Document?doc2?=?new?Document();??
  • ????????doc2.add(new?Field("name",?"lighter?blog",Field.Store.YES,Field.Index.TOKENIZED));??
  • ??
  • ????????IndexWriter?writer?=?new?IndexWriter(FSDirectory.getDirectory(path,?true),?new?StandardAnalyzer(),?true);??
  • ????????writer.setMaxFieldLength(3);??
  • ????????writer.addDocument(doc1);??
  • ????????writer.setMaxFieldLength(3);??
  • ????????writer.addDocument(doc2);??
  • ????????writer.close();??
  • ??
  • ????????IndexSearcher?searcher?=?new?IndexSearcher(path);??
  • ????????Hits?hits?=?null;??
  • ????????Query?query?=?null;??
  • ????????QueryParser?qp?=?new?QueryParser("name",new?StandardAnalyzer());??
  • ??????????
  • ????????query?=?qp.parse("lighter");??
  • ????????hits?=?searcher.search(query);??
  • ????????System.out.println("查找/"lighter/"?共"?+?hits.length()?+?"個(gè)結(jié)果");??
  • ??
  • ????????query?=?qp.parse("javaeye");??
  • ????????hits?=?searcher.search(query);??
  • ????????System.out.println("查找/"javaeye/"?共"?+?hits.length()?+?"個(gè)結(jié)果");??
  • ??
  • ????}??
  • ??
  • }??

  • 運(yùn)行結(jié)果:?

    Java代碼?
  • 查找"lighter"?共2個(gè)結(jié)果??
  • 查找"javaeye"?共1個(gè)結(jié)果??


  • 很久沒(méi)有看lucene了,這兩三天又復(fù)習(xí)了一下,上一些代碼都是前幾個(gè)月寫(xiě)的,只是改動(dòng)了一些字符串和包名顯示。轉(zhuǎn)載時(shí)請(qǐng)說(shuō)明,文章來(lái)自:http://lighter.javaeye.com。?

    ?

    總結(jié)

    以上是生活随笔為你收集整理的lucene简单实例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。