现在的位置: 首页 > 综合 > 正文

Lucene3.6学习记录 HelloWorld (一)

2018年02月10日 ⁄ 综合 ⁄ 共 2643字 ⁄ 字号 评论关闭

Lucene3.6  简单的练习案例

导入3.6的核心包就可以了

下载链接:lucene3.6下载地址

使用过程:

建立索引   分词  存储

----------------------------

关键字  分词  搜索 

package com.wzh.ml.one;

import java.io.File;
import java.io.FileReader;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
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.util.Version;

public class HelloWorld {
	private static final String PATH_OF_FILE = "F:\\MyLucene\\data";
	private static final String PATH_OF_INDEX = "F:\\MyLucene\\index";
	
	public void createIndex(){
		Directory directory = null;
		IndexWriter indexWriter = null;
		Document doc = null;
		try {
			//存放索引的目录
			directory = FSDirectory.open(new File(PATH_OF_INDEX));
			//由于Lucene2.9之后,其索引的格式就不会再兼容Lucene的所有版本了,所以在创建索引前,要指定其所匹配的Lucene版本号  
			//索引的建立器   分词  存储等
			indexWriter = new IndexWriter(directory, new IndexWriterConfig(Version.LUCENE_36, new StandardAnalyzer(Version.LUCENE_36)));
			
			for(File f  : new File(PATH_OF_FILE).listFiles()){
				doc = new Document();  //存储要保存的字段
				doc.add(new Field("content", new FileReader(f)));
				//存储  分词
				doc.add(new Field("fileName", f.getName(),Field.Store.YES,Field.Index.ANALYZED));
				//存储  不分词
				doc.add(new Field("filePath", f.getAbsolutePath(),Field.Store.YES,Field.Index.NOT_ANALYZED));
				
				indexWriter.addDocument(doc);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			if(null != indexWriter){
				try {
					indexWriter.close();
				} catch (Exception e) {
					System.out.println("关闭IndexWriter出现异常,堆栈信息如下:");
					e.printStackTrace();
				}
			}
		}
	}
	
	public void searchFile(){
		IndexReader indexReader = null;
		try {
			//首先要选择一个存放索引的文件夹
			indexReader = IndexReader.open(FSDirectory.open(new File(PATH_OF_INDEX)));
			IndexSearcher indexSearcher = new IndexSearcher(indexReader);
			 //创建基于Parser搜索的Query,创建时需指定其"搜索的版本,默认搜索的域,分词器"....这里的域指的是创建索引时Field的名字  
			QueryParser queryParser = new QueryParser(Version.LUCENE_36,"content",new StandardAnalyzer(Version.LUCENE_36));
			Query query = queryParser.parse("你是笨蛋!!!!!!!!!!!!");       //指定==>搜索域为content(即上一行文字指定的"content")中包含"哈哈"的文档  
			TopDocs tds = indexSearcher.search(query, 10); //第二个参数指定搜索后显示的条数,若查到5条则显示为5条,查到15条则只显示10条  
			ScoreDoc[] sds = tds.scoreDocs;           //TopDocs中存放的并不是我们的文档,而是文档的ScoreDoc对象  
            for(ScoreDoc sd : sds){                   //ScoreDoc对象相当于每个文档的ID号,我们就可以通过ScoreDoc来遍历文档  
                Document doc = indexSearcher.doc(sd.doc);  //sd.doc得到的是文档的序号  
                System.out.println(doc.get("fileName") + "[" + doc.get("filePath") + "]"); //输出该文档所存储的信息  
            }  
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

抱歉!评论已关闭.