是一個開放源代碼的全文檢索引擎工具包,但它不是一個完整的全文檢索引擎,而是一個全文檢索引擎的架構,提供了完整的查詢引擎和索引引擎,部分文本分析引擎(英文與德文兩種西方語言)。Lucene的目的是爲軟件開發人員提供一個簡單易用的工具包,以方便的在目標系統中實現全文檢索的功能,或者是以此爲基礎創建起完整的全文檢索引擎。算法
public static void createindex() throws Exception { //建立文件目錄 建立在項目目錄下的index中 Directory dir=FSDirectory.open(FileSystems.getDefault().getPath(System.getProperty("user.dir")+"/index")); //分詞處理 是一個抽象類 一種單字分詞,標準的 Analyzer analyzer=new IKAnalyzer(); //建立IndexWriterConfig對象 IndexWriterConfig config=new IndexWriterConfig(analyzer); //建立IndexWriter對象 IndexWriter iWriter=new IndexWriter(dir, config); //清除以前的索引 iWriter.deleteAll(); //建立文檔對象 Document doc=new Document(); //向文檔中添加文本內容字段,及字段類型 doc.add(new Field("fieldname","堅持到底gl博主的博文,轉載請註釋出處", TextField.TYPE_STORED)); //將文檔添加到indexWriter中,寫入索引文件中 iWriter.addDocument(doc); //關閉寫入 iWriter.close(); }
這樣運行能夠看到你的索引index中的內容文件已經建立出來了數據庫
索引已經建立,接下來查詢一下試試索引 ,傳入須要查詢的詞apache
public static void search(String string) throws Exception { Directory dir=FSDirectory.open(FileSystems.getDefault().getPath(System.getProperty("user.dir")+"/search")); //打開索引目錄的 DirectoryReader dReader=DirectoryReader.open(dir); IndexSearcher searcher=new IndexSearcher(dReader); //第一個參數 field值 ,第二個參數用戶須要檢索的字符串 Term t=new Term("fieldname",string); //將用戶須要索引的字符串封裝成lucene能識別的內容 Query query=new TermQuery(t); //查詢,最大的返回值10 TopDocs top=searcher.search(query, 10); //命中數,那個字段命中,命中的字段有幾個 System.out.println("命中數:"+top.totalHits); //查詢返回的doc數組 ScoreDoc[] sDocs= top.scoreDocs; for (ScoreDoc scoreDoc : sDocs) { //輸出命中字段內容 System.out.println(searcher.doc(scoreDoc.doc).get(field)); } }
就這樣一個全文檢索的測試就出來了,多去思考總結,擴展出去數組
再給添加一個代碼有益於理解架構
public static void main(String[] args) throws Exception { String chString="堅持到底的文章,轉載請註釋出處"; Analyzer analyzer=new IKAnalyzer(); TokenStream stream=analyzer.tokenStream("word", chString); stream.reset(); CharTermAttribute cta=stream.addAttribute(CharTermAttribute.class); while (stream.incrementToken()) { System.out.println(cta.toString()); } stream.close(); }
顯示以下:工具
還能夠添加這幾個文件,有一點須要注意的是,注意你的編碼格式學習
第一個:ext.dic 擴展詞典,分詞中那個須要組在一塊兒的,如:分詞處理可能將「堅持到底」四個字分爲「堅持」和「到底」,能夠在這個文件中直接添加堅持到底,就能夠顯示出堅持到底的這個索引測試
第三個:stopword.dic 擴展中止詞典,分詞中不想出現的,不但願他被分開出現或單獨的,能夠往裏面寫,檢索的時候就不會有優化
第二個:是指定上面兩個擴展詞典的編碼
這些就是最基本掌握的內容,還有不少分詞算法等類型,須要去擴展