lucene搜索引擎总结
生活随笔
收集整理的這篇文章主要介紹了
lucene搜索引擎总结
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
<p>Lucene分析器---Analyzer主要包括分詞器和過濾器兩種組件</p><p>分詞器主要作用是對傳入的文本進行切分,將文本按規則切分為一個個可以進入索引的最小單位,</p><p>而過濾器的功能則是對這種最小單位進行預處理,比如‘大寫轉小寫,復數轉單數’也可以進行相當復雜的的功能,如根據語義改寫拼寫錯誤的單詞。</p><p>分析器使用過濾器和分詞器構成了一個管道,文本在“流過”這個管道后,就成為可以進入索引的最小單位。</p>
package com.cn.zsj.lucene;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.nio.file.Paths;import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.StringField;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
/** 這里推薦2本非常好的書籍,對搜索引擎的入門和提高都有極大幫助* 《Ajax+Lucene構建搜索引擎》--李剛 宋偉 邱哲 編著(人民郵電出版社)* 《lucene搜索引擎開發權威經典》--于天恩 編著(中國鐵道出版社)*/
/** 這個例子要導入的包有* lucene-analyzers-common-5.3.0.jar* lucene-core-5.3.0.jar*/
public class TestLucene {private static String indexPath="f://indexPath";//這里我就定死索引文件的存放目錄吧,這樣好理解private static String filePath="f://filePath.txt";//文本文件的路徑
public static void main(String[] args) {try {createIndex();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}
}/** 第一步* 構造索引寫入器對象IndexWriter* 這里要掌握的有索引的存放位置----FSDirectory,RAMDirectory* 在使用FSDirectory時,Lucene會自動再內存中建立緩存,然后到一定時候就將索引寫入磁盤* 在使用RAMDirectory時,從功能角度來講,FSDirectory在磁盤上能做的,它在內存中一樣能做,并且會有更快的速度,* 唯一的問題就是它在虛擬機退出后,內存中的索引就不復存在了。因此如果還需要內存中的索引時,就需要將內存中的* 索引轉入磁盤上,這就需要合并索引了,將內存中的索引合并到磁盤索引上* 這里用的方法是IndexWriter的addIndexes(Direcroty /Directory[])方法* 要注意合并前一定要先關閉被合并索引器的索引寫入器,如果不這樣會使程序運行失敗*/
public static IndexWriter getIndexWriter()throws IOException{Path path=Paths.get(indexPath);//通過指定文件系統的uri構建Path實例Directory dir=FSDirectory.open(path);//通過Path對象構建FSDirectory實例Analyzer analyzer=new StandardAnalyzer();//分析器、分詞器,作用是在IndexWriter將文件寫入索引以前,把文本信息切分成一個個可以進行索引的詞條IndexWriterConfig indexCfg=new IndexWriterConfig(analyzer);//用標準的分詞器配置索引寫入器,詳細介紹見API文檔IndexWriter writer=new IndexWriter(dir,indexCfg);//這是一個索引寫入器,指定索引文件的存放目錄,主要的功能是將文檔加入索引中。同時控制索引過程中的各種參數return writer;
}
/** 第二步* 構造文檔對象Document* Document:lucene只對Document對象建立索引。任何需要進行索引的‘文件’都必須轉化為Document對象才能被索引或者搜索到* 任何數據源經過組織都可以構建一個Document對象* Field:是與document對象緊密相連的一個概念,他代表了不同的數據源名稱* Field有很多派生類來處理各種不同的數據源*/
public static Document getDocument() throws FileNotFoundException{Document doc=new Document();//假如這里要將一個文本文件加入到索引文件中File f=new File(filePath);//通過指定文本文件的路徑構造File對象,String filename=f.getName();FileInputStream fis=new FileInputStream(f);//構建文件輸入流對象Reader reader=new BufferedReader(new InputStreamReader(fis,StandardCharsets.UTF_8));doc.add(new StringField("filename",filename,Field.Store.YES));//Field.Store.YES:存儲字段值(未分詞前的字段值)doc.add(new TextField("content",reader));return doc;
}
/** 切記要調用IndexWriter的close()方法來關閉寫入器。只有調用了close方法后,索引寫入器才會將存放于內存中的所有內容寫入磁盤并關閉流。*/
public static void createIndex() throws IOException{IndexWriter writer=TestLucene.getIndexWriter();Document doc=TestLucene.getDocument();try {writer.addDocument(doc);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}writer.close();
}}
下面是索引文件的存放目錄
下面是被搜索的文件內容:
:
Lucene索引工具箱:Luke,是一個索引瀏覽器,去官網下載源碼,使用Eclipse打開源文件再運行。
Lucene索引監視器:LIMO,是一個WAR格式的文件,可以在WEB下瀏覽索引文件的狀態信息
中文分詞工具ICTCLAS:是中科院研制出的基于多層隱馬模型的漢語詞法分析系統,是一個軟件,有興趣可以取下載安裝使用。
總結
以上是生活随笔為你收集整理的lucene搜索引擎总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于Canvas的动画基本原理与数理分析
- 下一篇: C#植物大战僵尸中文版