10 Lucene:02.lucene入门案例
08.入门程序-工程搭建、09.入门程序-创建索引库、10.使用luke查看索引库的内容、11.入门程序-查询索引库
本例程使用:lucene-7.4.0.zip
运行环境要求jdk1.9版本或以上
开发工具:IntelliJ IDEA 2019.2.2
本入门案例用到的jar包:
lucene-core-7.4.0.jar
lucene-analyzers-common-7.4.0.jar
一、Lucene测试环境搭建
创建一个空工程Project
添加自定义模块Modules
new 一个Directory文件夹名称为lib
手工添加jar包的依赖Depedency到Module
09.入门程序-创建索引库
创建索引代码如下,读取的文件目录位置是
C:\FFOutput\searchsource
package cn.bjut;
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.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.junit.Test;
import java.io.File;
import java.nio.file.Path;
public class LuceneFirst{
@Test
public void createIndex() throws Exception{
//1、创建一个Director对象,指定索引库保存的位置。
//把索引库保存在磁盘上
Path path = new File("C:\\FFOutput\\index").toPath();
Directory directory = FSDirectory.open(path);
//2、基于Directory对象创建一个IndexWriter对象
IndexWriter indexWriter =new IndexWriter(directory,new IndexWriterConfig());
//3、读取磁盘上的文件,对应每个文件创建一个文档对象
File dir= new File("C:\\FFOutput\\searchsource");
File[] files =dir.listFiles();
for (File file:files
) {
//取文件名
String fileName =file.getName();
//文件路径
String filePath =file.getPath();
//文件的内容commons-io工具类
String fileContent= FileUtils.readFileToString(file,"utf-8");
//文件的大小
long fileSize = FileUtils.sizeOf(file);
//创建Field
//参数1:域的名称;参数2:域的内容;参数3:是否存储
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);
//4、创建文档对象
Document document = new Document();
//向文档对象中添加域
document.add(fieldName);
document.add(fieldPath);
document.add(fieldContent);
document.add(fieldSize);
//5、把文档对象写入索引库
indexWriter.addDocument(document);
}
//6、关闭indexWriter对象
indexWriter.close();
}
}
本地磁盘上指定目录下被创建的Lucene索引
10.使用luke查看索引库的内容
luke-javafx-7.4.0-luke-release.zip
需要jdk1.9版本或以上,此处使用的是jdk11.0.4
11.入门程序-查询索引库
在上面的LuceneFirst类的里面继续添加如下代码:
@Test
public void searchIndex() throws Exception {
//1、创建一个Director对象,指定索引库的位置
Directory directory = FSDirectory.open(new File("C:\\FFOutput\\index").toPath());
//2、创建一个IndexReader对象
IndexReader indexReader = DirectoryReader.open(directory);
//3、创建一个indexSearcher对象,构造方法中的参数indexReader对象
IndexSearcher indexSearcher =new IndexSearcher(indexReader);
//4、创建一个Query对象,使用其中的TermQuery
Query query = new TermQuery(new Term("content","spring"));
//5、执行查询,得到一个TopDocs对象
//参数1:查询对象 参数2:查询结果返回的最大记录数
TopDocs topDocs = indexSearcher.search(query,10);
//6、取查询结果的总记录数
System.out.println("查询总记录数:" + topDocs.totalHits);
//7、取文档列表
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
//8、打印文档中的内容
for (ScoreDoc doc:
scoreDocs) {
//取文档ID
int docId = doc.doc;
//根据ID取文档对象
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("---------------------");
}
//9、关闭IndexReader对象
indexReader.close();
}
控制台会打印输出结果。
=====================================
10 Lucene:01.全文检索基本介绍
end