您的位置:首页 > 编程语言

Lucene的学习第六篇——入门代码再学习

2018-01-04 00:04 351 查看
到这步应该明白以下几个问题

 lucene实现全文检索的流程

 文档对象里面封装的域信息,几种子类域(查文档会用)

 分词是为什么,怎么分,什么是语汇单元,

 索引是怎么创建的,索引与语汇单元,与文档对象之间的关系,

 能成功运行入门代码,能明白入门代码实现了的功能。

这篇主要回顾入门代码,介绍代码。提出需求问题。进一步实现场景一。

创建索引:

/**
* 创建IndexWriter(创建索引准备工作)
*/
private IndexWriter createIndexWriter(String indexRepositoryPath) throws Exception {
// 创建Directory对象
Directory dir = FSDirectory.open(new File(indexRepositoryPath));
// 索引库还可以存放到内存中
// Directory directory = new RAMDirectory();
// 创建一个标准分析器
Analyzer analyzer = new StandardAnalyzer();
// 创建IndexWriterConfig对象
// 参数1: Lucene的版本信息
// 参数2: 分析器对象
IndexWriterConfig config = new IndexWriterConfig(Version.LATEST, analyzer);
// 创建IndexWriter对象
return new IndexWriter(dir, config);
}

public void testCreateIndex() throws Exception {
// 第一步:创建IndexWriter(索引存放的位置)
// 类似IO中的写,将索引写进指定目录下
IndexWriter indexWriter = createIndexWriter("G:\\a\\v");
// 第二步:开始创建索引
// 采集原始数据(从指定的目录下取得文件对象列表集合)
File f = new File("G:\\a\\新建文件夹");
// 遍历文件对象列表
for (File file : f.listFiles()) {
//为每一个文档创建文档对象
Document document = new  Document();
// 文件名称
String file_name = file.getName();
// 文件大小
long file_size = FileUtils.sizeOf(file);
// 文件路径
String file_path = file.getPath();
// 文件内容
String file_content = FileUtils.readFileToString(file);

//将以上的文档信息,封装到域中
// 第一个域,名字,fileName,查看子类域表(域的再学习),索引,分词都已经实现,
//是否储存,指定为储存
Field fileNameField = new TextField("fileName", file_name, Store.YES);
//第二个域:名字,fileSize,使用的是LongField域,查表看默认实现了什么,我们指定为储存,
Field fileSizeField = new LongField("fileSize", file_size, Store.YES);
//第三个域,存放的是 filepath,路径存放的内容,没有分词,没有索引,储存了。
Field filePathField = new StoredField("filePath", file_path);
//第四域。存放的是:内容,分词,索引了,但是我们没有储存,(使用的是No。)
Field fileContentField = new TextField("fileContent", file_content, Store.NO);

document.add(fileNameField);
document.add(fileSizeField);
document.add(filePathField);
document.add(fileContentField);

//将每个文档扔进索引库(自动为文档建立了索引)
indexWriter.addDocument(document);
}
indexWriter.close();

}
运行成功:即创建索引成功


查询,就没有说的了,查询就是去读索引库,然后根据索引找到语汇单元,找到文档

TermQuery query = new TermQuery(new Term("filename", "spring.txt"));
//执行查询(参数1:查询条件对象,参数2:查询结果返回的最大值)
TopDocs topDocs = searcher.search(query, 10);


上面两个代码就是执行查询的操作,第二句代码,返回的10,意思就是返回默认排序的前10个。

引出两个问题:

1:是怎么排序的?

2:我们只是能够搜索这个spring.txt文档,怎么实现搜索“全文”,搜索到“全文检索.txt

返回lucene/slor文章的目录:http://blog.csdn.net/m15517986455/article/details/78986856

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: