Lucene——入门案例

来源:互联网 发布:java坐标点的构造函数 编辑:程序博客网 时间:2024/05/18 01:26

今天开始学习lucene

在lib里面导入两个包 junit.jar lucene-core-3.50.jar

六步

首先建立索引Directory、IndexWriter两个前提

创建Document

为Dcument增加Field

用Writer写入Document

关闭writer

九步

首先建立Directory、IndexReader两个前提

其次用IndexReader获取IndexSearcher

QueryParse

Query

TopDocs

ScoreDocs

Document

关闭reader

 

创建在哪个域中搜索什么内容的query

最终目的还是得到Document

关闭reader

HelloLucene.java

package org.itat.test;import java.io.File;import java.io.FileReader;import java.io.IOException;import org.apache.commons.io.FileUtils;import org.apache.lucene.analysis.standard.StandardAnalyzer;import org.apache.lucene.document.Document;import org.apache.lucene.document.Field;import org.apache.lucene.index.CorruptIndexException;import org.apache.lucene.index.IndexReader;import org.apache.lucene.index.IndexWriter;import org.apache.lucene.index.IndexWriterConfig;import org.apache.lucene.queryParser.QueryParser;import org.apache.lucene.search.IndexSearcher;import org.apache.lucene.search.Query;import org.apache.lucene.search.ScoreDoc;import org.apache.lucene.search.TopDocs;import org.apache.lucene.store.Directory;import org.apache.lucene.store.FSDirectory;import org.apache.lucene.store.LockObtainFailedException;import org.apache.lucene.store.RAMDirectory;import org.apache.lucene.util.Version;public class HelloLucene {/** * 建立是索引 */public void index() {IndexWriter writer = null;try {// 1,创建索引Directory// Directory directory = new RAMDirectory();放在内存中Directory directory = FSDirectory.open(new File("e:/lucene/index_01"));// 放在硬盘中// 2,创建IndexWriterIndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_35,new StandardAnalyzer(Version.LUCENE_35));writer = new IndexWriter(directory, iwc);// 3,创建文档DocumentDocument document = null;// 4,为Document添加域FieldFile file = new File("e:/lucene/example");for (File f : file.listFiles()) {document = new Document();//String content=FileUtils.readFileToString(f);//System.out.println(content);//commons-io-2.1.jar这个包很好用//1.txt和2.txt合二为一了最后document.add(new Field("content", new FileReader(f)));document.add(new Field("filename", f.getName(),Field.Store.YES, Field.Index.NOT_ANALYZED));document.add(new Field("path", f.getAbsolutePath(),Field.Store.YES, Field.Index.NOT_ANALYZED));// 5,通过indexWriter吧文档添加到索引directory中writer.addDocument(document);}} catch (CorruptIndexException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (LockObtainFailedException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {if (writer != null)try {writer.close();} catch (CorruptIndexException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}/** * 搜索 */public void search() {try {// 1.创建DirectoryDirectory directory = FSDirectory.open(new File("e:/lucene/index_01"));// 2.创建IndexReaderIndexReader reader = IndexReader.open(directory);// 3.根据IndexReader创建IndexSercherIndexSearcher searcher = new IndexSearcher(reader);// 4.创建搜索的Query// 创建parse来确定搜索文件的内容,第二个参数是搜索的域QueryParser parser = new QueryParser(Version.LUCENE_35, "content",new StandardAnalyzer(Version.LUCENE_35));// 创建query,表示搜索域为content包含的内容Query query = parser.parse("java");// 5.根据sercher搜索并返回TopDocsTopDocs tds = searcher.search(query, 10);// 6.根据TopDocs获取ScoreDoc对象ScoreDoc sds[] = tds.scoreDocs;for (ScoreDoc sd : sds) {// 7.根据sercher对象和Scoredoc对象获取Document对象Document d = searcher.doc(sd.doc);// 8.根据Document对象获取需要的值System.out.println(d.get("filename") + "[" + d.get("path")+ "]");}// 9.关闭readerreader.close();} catch (Exception e) {e.printStackTrace();// TODO: handle exception}}}


 

TestLucene.java


 

package org.itat.test;import org.junit.Test;public class TestLucene {@Testpublic void testIndex(){ HelloLucene helloLucene=new HelloLucene(); helloLucene.index();}@Testpublic void testSearch(){ HelloLucene helloLucene=new HelloLucene(); helloLucene.search();}}

 

 

 

原创粉丝点击