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();
}
}
Java 搭建lucene-8.6.1.zip
猜你喜欢
转载自blog.csdn.net/Zaric_001/article/details/108061029#comments_16256202
今日推荐
周排行