當(dāng)前位置:
首頁(yè) >
lucene搜索引擎总结
發(fā)布時(shí)間:2024/1/1
42
豆豆
生活随笔
收集整理的這篇文章主要介紹了
lucene搜索引擎总结
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
<p>Lucene分析器---Analyzer主要包括分詞器和過(guò)濾器兩種組件</p><p>分詞器主要作用是對(duì)傳入的文本進(jìn)行切分,將文本按規(guī)則切分為一個(gè)個(gè)可以進(jìn)入索引的最小單位,</p><p>而過(guò)濾器的功能則是對(duì)這種最小單位進(jìn)行預(yù)處理,比如‘大寫(xiě)轉(zhuǎn)小寫(xiě),復(fù)數(shù)轉(zhuǎn)單數(shù)’也可以進(jìn)行相當(dāng)復(fù)雜的的功能,如根據(jù)語(yǔ)義改寫(xiě)拼寫(xiě)錯(cuò)誤的單詞。</p><p>分析器使用過(guò)濾器和分詞器構(gòu)成了一個(gè)管道,文本在“流過(guò)”這個(gè)管道后,就成為可以進(jìn)入索引的最小單位。</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本非常好的書(shū)籍,對(duì)搜索引擎的入門和提高都有極大幫助* 《Ajax+Lucene構(gòu)建搜索引擎》--李剛 宋偉 邱哲 編著(人民郵電出版社)* 《lucene搜索引擎開(kāi)發(fā)權(quán)威經(jīng)典》--于天恩 編著(中國(guó)鐵道出版社)*/
/** 這個(gè)例子要導(dǎo)入的包有* 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();}
}/** 第一步* 構(gòu)造索引寫(xiě)入器對(duì)象IndexWriter* 這里要掌握的有索引的存放位置----FSDirectory,RAMDirectory* 在使用FSDirectory時(shí),Lucene會(huì)自動(dòng)再內(nèi)存中建立緩存,然后到一定時(shí)候就將索引寫(xiě)入磁盤* 在使用RAMDirectory時(shí),從功能角度來(lái)講,FSDirectory在磁盤上能做的,它在內(nèi)存中一樣能做,并且會(huì)有更快的速度,* 唯一的問(wèn)題就是它在虛擬機(jī)退出后,內(nèi)存中的索引就不復(fù)存在了。因此如果還需要內(nèi)存中的索引時(shí),就需要將內(nèi)存中的* 索引轉(zhuǎn)入磁盤上,這就需要合并索引了,將內(nèi)存中的索引合并到磁盤索引上* 這里用的方法是IndexWriter的addIndexes(Direcroty /Directory[])方法* 要注意合并前一定要先關(guān)閉被合并索引器的索引寫(xiě)入器,如果不這樣會(huì)使程序運(yùn)行失敗*/
public static IndexWriter getIndexWriter()throws IOException{Path path=Paths.get(indexPath);//通過(guò)指定文件系統(tǒng)的uri構(gòu)建Path實(shí)例Directory dir=FSDirectory.open(path);//通過(guò)Path對(duì)象構(gòu)建FSDirectory實(shí)例Analyzer analyzer=new StandardAnalyzer();//分析器、分詞器,作用是在IndexWriter將文件寫(xiě)入索引以前,把文本信息切分成一個(gè)個(gè)可以進(jìn)行索引的詞條IndexWriterConfig indexCfg=new IndexWriterConfig(analyzer);//用標(biāo)準(zhǔn)的分詞器配置索引寫(xiě)入器,詳細(xì)介紹見(jiàn)API文檔IndexWriter writer=new IndexWriter(dir,indexCfg);//這是一個(gè)索引寫(xiě)入器,指定索引文件的存放目錄,主要的功能是將文檔加入索引中。同時(shí)控制索引過(guò)程中的各種參數(shù)return writer;
}
/** 第二步* 構(gòu)造文檔對(duì)象Document* Document:lucene只對(duì)Document對(duì)象建立索引。任何需要進(jìn)行索引的‘文件’都必須轉(zhuǎn)化為Document對(duì)象才能被索引或者搜索到* 任何數(shù)據(jù)源經(jīng)過(guò)組織都可以構(gòu)建一個(gè)Document對(duì)象* Field:是與document對(duì)象緊密相連的一個(gè)概念,他代表了不同的數(shù)據(jù)源名稱* Field有很多派生類來(lái)處理各種不同的數(shù)據(jù)源*/
public static Document getDocument() throws FileNotFoundException{Document doc=new Document();//假如這里要將一個(gè)文本文件加入到索引文件中File f=new File(filePath);//通過(guò)指定文本文件的路徑構(gòu)造File對(duì)象,String filename=f.getName();FileInputStream fis=new FileInputStream(f);//構(gòu)建文件輸入流對(duì)象Reader reader=new BufferedReader(new InputStreamReader(fis,StandardCharsets.UTF_8));doc.add(new StringField("filename",filename,Field.Store.YES));//Field.Store.YES:存儲(chǔ)字段值(未分詞前的字段值)doc.add(new TextField("content",reader));return doc;
}
/** 切記要調(diào)用IndexWriter的close()方法來(lái)關(guān)閉寫(xiě)入器。只有調(diào)用了close方法后,索引寫(xiě)入器才會(huì)將存放于內(nèi)存中的所有內(nèi)容寫(xiě)入磁盤并關(guān)閉流。*/
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();
}}
下面是索引文件的存放目錄
下面是被搜索的文件內(nèi)容:
:
Lucene索引工具箱:Luke,是一個(gè)索引瀏覽器,去官網(wǎng)下載源碼,使用Eclipse打開(kāi)源文件再運(yùn)行。
Lucene索引監(jiān)視器:LIMO,是一個(gè)WAR格式的文件,可以在WEB下瀏覽索引文件的狀態(tài)信息
中文分詞工具ICTCLAS:是中科院研制出的基于多層隱馬模型的漢語(yǔ)詞法分析系統(tǒng),是一個(gè)軟件,有興趣可以取下載安裝使用。
總結(jié)
以上是生活随笔為你收集整理的lucene搜索引擎总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 基于Canvas的动画基本原理与数理分析
- 下一篇: FileZilla-FTP下载失败