Java 搭建lucene-8.6.1.zip


import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
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.Term;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
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.junit.jupiter.api.Test;

/**
 * 环境: lucene-8.6.1.zip
 * 引入:
 * 		commons-io-2.4.jar
 * 		lucene-analyzers-common-8.6.1.jar
 * 		lucene-core-8.6.1.jar
 * 若需要luke,解压lucene-8.6.1.zip的lucene-8.6.1\lucene-8.6.1\luke,点击bat即可
 * @author Evolve
 *
 */
public class LuceneFirst {

	/**
	 * 创建索引
	 * 
	 * @throws IOException
	 */
	@Test
	@SuppressWarnings("resource")
	public void createIndex() throws IOException {

		// 1、创建一个Directory对象,指定索引库保存的位置
		// Directory directory=new RAMDirectory();//写入内存模式
		Directory directory = FSDirectory.open(new File("D:\\lucene").toPath());
		// 2、基于Directory对象创建一个IndexWriter对象
		IndexWriter indexWriter = new IndexWriter(directory, new IndexWriterConfig());
		// 3、读取磁盘上的文件
		File dir = new File("D:\\luceneFiles");
		File[] files = dir.listFiles();
		for (File f : files) {
			String fileName = f.getName();
			String filePath = f.getPath();
			String fileContent = FileUtils.readFileToString(f, "utf-8");
			long fileSize = FileUtils.sizeOf(f);
			Field field1 = new TextField("name", fileName, Field.Store.YES);
			Field field2 = new TextField("path", filePath, Field.Store.YES);
			Field field3 = new TextField("content", fileContent, Field.Store.YES);
			Field field4 = new TextField("size", fileSize + "", Field.Store.YES);
			Document fileDocument = new Document();
			// 4、向文档对象中添加域
			fileDocument.add(field1);
			fileDocument.add(field2);
			fileDocument.add(field3);
			fileDocument.add(field4);

			indexWriter.addDocument(fileDocument);
			// 5、把文档对象的写入索引库
		}
		// 6、关闭indexWriter对象
		indexWriter.close();

	}
	
	@Test
	public void selectIndex()throws IOException {
		//1、创建directory
		Directory directory = FSDirectory.open(new File("D:\\lucene").toPath());
		//2、基于directory创建indexReader
		IndexReader indexReader = DirectoryReader.open(directory);
		//3、基于indexReader创建IndexSearcher
		IndexSearcher indexSearcher=new IndexSearcher(indexReader);
		//4、创建query,指定查询内容和关键词
		Query query =new TermQuery(new Term("content","天"));
		//5、基于query创建TopDocs,指定显示10条
		TopDocs topDocs = indexSearcher.search(query, 10);
		System.out.println("查询中命中数"+topDocs.totalHits.value);
		//6、遍历得到文件相关信息
		ScoreDoc[] scoreDocs = topDocs.scoreDocs;
		for(ScoreDoc s:scoreDocs) {
			int id = s.doc;
			Document document = indexSearcher.doc(id);
			System.out.println("文件名称:"+document.get("name"));
			System.out.println("文件内容:"+document.get("content"));
			System.out.println("文件大小:"+document.get("size"));
	    System.out.println("========================================================");
		}
		//7、关闭indexReader
		indexReader.close();
	}
}

猜你喜欢

转载自blog.csdn.net/Zaric_001/article/details/108061029#comments_16256202
今日推荐