首页>代码>lucene4.3简单搜索示例代码>/lucene_demo/src/cn/lucene/lesson1/TxtFileIndex.java
package cn.lucene.lesson1;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

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.Store;
import org.apache.lucene.document.StringField;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;

/**
 * Lucene 是一个基于 Java 的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能。
 * 
 */
public class TxtFileIndex {
	/*索引目录*/
	private final static String INDEX_PATH = "d:/lucene/index";
	/*文件目录*/
	private final static String DATA_PATH = "d:/lucene/data";
	
	public static void main(String[] args) throws Exception{
		//创建索引
		//createTxtIndexs();
		//搜索索引
		searchTxtIndexs();
	}

	private static void searchTxtIndexs() throws IOException {
		File indexDir = new File(INDEX_PATH);
		//索引位置
		Directory directory = FSDirectory.open(indexDir);
		//索引读取
		IndexReader reader = DirectoryReader.open(directory);
		//索引搜索
		IndexSearcher searcher = new IndexSearcher(reader);
		//定义关键字
		Term term = new Term("contents", "he");
		//关键字搜索
		TermQuery query = new TermQuery(term);
		//
		TopDocs topDocs = searcher.search(query, 10);
		
		ScoreDoc[] scoreDocs = topDocs.scoreDocs;
		System.out.println("查询结果总数---" + topDocs.totalHits + ", 最大的评分--" + topDocs.getMaxScore());  
		for (int i = 0; i < scoreDocs.length; i++) {
			int doc = scoreDocs[i].doc;
			Document document = searcher.doc(doc);
			System.out.println("contents====" + document.get("contents"));  
			System.out.println("id--" + scoreDocs[i].doc + "---scors--" + scoreDocs[i].score+"---index--" + scoreDocs[i].shardIndex);  
		}
		reader.close();
	}
	
	/**
	 * 创建索引
	 * @throws IOException
	 * @throws FileNotFoundException
	 */
	private static void createTxtIndexs() throws IOException, FileNotFoundException {
		File indexDir = new File(INDEX_PATH);
		File dataDir = new File(DATA_PATH);
		//标准分析器
		Analyzer luceneAnalyzer = new StandardAnalyzer(Version.LUCENE_43);
		//获得文件目录
		File[] dataFiles = dataDir.listFiles();
		//索引的存储的位置
		Directory directory = FSDirectory.open(indexDir);
		//设置了存放索引的文件夹将以覆盖或者新建的方式建立
		IndexWriterConfig iwConfig = new IndexWriterConfig(Version.LUCENE_43, luceneAnalyzer);
		iwConfig.setOpenMode(OpenMode.CREATE_OR_APPEND);
		//创建索引, 作用是把一个个的 Document 对象加到索引中来
		IndexWriter indexWriter = new IndexWriter(directory, iwConfig);
		long startTime = System.currentTimeMillis();
		//遍历文件
		for(int i = 0; i < dataFiles.length; i++){ 
			if(dataFiles[i].isFile() && dataFiles[i].getName().endsWith(".txt")){
				 System.out.println("Indexing file " + dataFiles[i].getCanonicalPath()); 
				 //用来描述文档的
				 Document document = new Document();
				 BufferedReader reader = new BufferedReader(new FileReader(dataFiles[i]));
				 document.add(new StringField("id", dataFiles[i].getCanonicalPath(), Store.YES));
				 //document.add(new TextField("contents", reader));//此构造方法不进行存储,需要将reader内容读取出来
				 String line = reader.readLine();
				 StringBuffer sbf = new StringBuffer();
				 while(line != null){
					 sbf.append(line);
					 line = reader.readLine();
				 }
				 document.add(new TextField("contents", sbf.toString(), Store.YES));
				 reader.close();
				 indexWriter.addDocument(document);
			}
		}
		System.out.println("indexs created!");  
		indexWriter.close();
		long endTime = System.currentTimeMillis();
		System.out.println("创建索引耗时: " + (endTime - startTime) + " milliseconds. " + dataDir.getPath());        
	}
}
最近下载更多
kilord  LV1 2021年5月31日
不辞冰雪为卿热  LV4 2021年1月4日
813405250  LV5 2021年1月2日
w1nguu  LV1 2020年12月28日
xiao2020  LV2 2020年11月2日
2018312303  LV5 2020年10月24日
hyz419  LV6 2020年9月25日
1254082  LV1 2020年6月14日
Sillage  LV3 2020年6月1日
lekers  LV14 2020年1月2日
最近浏览更多
szf123  LV12 2023年12月10日
微信网友_6040315240812544  LV8 2022年10月20日
19895630790  LV1 2022年7月1日
chenhongjie  LV5 2021年10月21日
Altria  LV5 2021年8月13日
kilord  LV1 2021年5月31日
ronnie0507  LV8 2021年5月17日
lodddy  LV6 2021年5月4日
3270302262 2021年3月27日
暂无贡献等级
caozhaoqi83  LV5 2021年1月21日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友