Lucene入门程序
环境搭建
- 创建一个Java工程
- 导入jar包
lucene-core-7.4.0.jar
lucene-analyzers-common-7.4.0.jar
commons-io-2.6.jar
创建索引
步骤
- 创建一个Directory对象,指定索引库保存的位置.
- 基于Directory对象创建一个IndexWriter对象.
- 读取磁盘上的文件,对应每个文件创建一个文档对象.
- 向文档对象中添加域.
- 把文档对象写入索引库.
- 关闭IndexWriter对象.
@Test
public void createIndex() throws Exception {
Directory directory = FSDirectory.open(new File("D:\\Folder\\lucene\\index").toPath());
IndexWriter indexWriter = new IndexWriter(directory, new IndexWriterConfig());
File dir = new File("D:\\Folder\\lucene\\searchsource");
File[] files = dir.listFiles();
for (File file : files) {
String fileName = file.getName();
String filePath = file.getPath();
String fileContent = FileUtils.readFileToString(file, "UTF-8");
long fileSize = FileUtils.sizeOf(file);
Field fieldName = new TextField("name", fileName, Field.Store.YES);
Field fieldPath = new TextField("path", filePath, Field.Store.YES);
Field fieldContent = new TextField("content", fileContent, Field.Store.YES);
Field fieldSize = new TextField("size", fileSize + "", Field.Store.YES);
Document document = new Document();
document.add(fieldName);
document.add(fieldPath);
document.add(fieldContent);
document.add(fieldSize);
indexWriter.addDocument(document);
}
indexWriter.close();
}
查询索引
步骤
- 创建一个Directory对象,指定索引库的位置.
- 创建一个IndexReader对象.
- 创建一个IndexSearcher对象.
- 创建一个Query对象,TermQuery.
- 执行查询,得到TopDocs对象.
- 取得查询结果的总记录数
- 取文档列表.
- 打印文档中的内容.
- 关闭IndexReader对象.
@Test
public void searchIndex() throws Exception {
Directory directory = FSDirectory.open(new File("D:\\Folder\\lucene\\index").toPath());
IndexReader indexReader = DirectoryReader.open(directory);
IndexSearcher indexSearcher = new IndexSearcher(indexReader);
Query query = new TermQuery(new Term("content", "spring"));
TopDocs topDocs = indexSearcher.search(query, 10);
System.out.println("查询总记录数:" + topDocs.totalHits);
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
for (ScoreDoc scoreDoc : scoreDocs) {
int docId = scoreDoc.doc;
Document document = indexSearcher.doc(docId);
System.out.println(document.get("name"));
System.out.println(document.get("path"));
System.out.println(document.get("size"));
System.out.println(document.get("content"));
System.out.println("-----------------------");
}
indexReader.close();
}