Luncene学习笔记 -- day03 入门程序

一:创建索引库

(1)、步骤分析

1、创建一个java工程

2、把luncene使用的jar包添加到工程

3、创建一个Directory对象,可以保存到内容中。通常是保存到磁盘上

4、创建一个IndexWriter对象,包含DirectoryIndexWriterConfig两个对象,IndexWriterConfig中又有VersionAnalyzer两个参数

5、读取磁盘上的文件,取文件属性

6、创建一个Document对象,想Document中添加域

7、把Document对象写入索引库

8、关闭IndexWriter对象

(2)、具体实现

1、创建项目,导入jar包



2、编写代码

package com.itcast.demo;

import java.io.File;

import org.apache.commons.io.FileUtils;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.Field.Store;
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.apache.lucene.util.Version;

public class LuncenDemo {

	public static void main(String[] args) throws Exception {
		//保存到内存中
		//Directory directory = new RAMDirectory();
		//1.保存到磁盘 -- 创建磁盘目录对象
		Directory directory = FSDirectory.open(new File("G:\\temp\\index"));
		//2.创建一个indexwriter对象,包含两个参数(Directory、Indexwriterconfig)
		//创建一个标准分词器
		Analyzer analyzer = new StandardAnalyzer();
		//参数1:luncene当前版本
		//参数2:分词器对象
		IndexWriterConfig conf = new IndexWriterConfig(Version.LATEST, analyzer);
		IndexWriter indexWriter = new IndexWriter(directory,conf);
		//3.读取磁盘上的文件
		File dir = new File("G:\\source");
		File[] listFiles = dir.listFiles();
		for (File file : listFiles) {
			//4.取文件属性
			String fileName = file.getName();//读取文件名
			String filePath = file.getPath();//文件路径
			String fileContent = FileUtils.readFileToString(file);//读取文件内容
			long fileSize = FileUtils.sizeOf(file);//读取文件大小
			//5.创建文档对象
			Document doc = new Document();
			//参数1:域的名称     参数2:域的内容      参数3:是否保存内容到文档中,只有保存后,才能从document中取field的内容
			Field fieldName = new TextField("name",fileName,Store.YES);
			Field fieldPath = new TextField("path",filePath,Store.YES);
			Field fieldContent = new TextField("content",fileContent,Store.YES);
			Field fieldSize = new TextField("size",fileSize+"",Store.YES);
			doc.add(fieldName);
			doc.add(fieldPath);
			doc.add(fieldContent);
			doc.add(fieldSize);
			//6.把document对象写入索引库
			indexWriter.addDocument(doc);
		}
		//7.关闭indexWriter对象
		indexWriter.close();
	}
}
3、运行之后index目录中内容

(3):使用luke工具查看生成的索引库


二:查询索引库

(1)、具体步骤

1.创建一个Directory对象,指定索引库的位置

2.创建一个IndexReader对象

3.创建一个IndexSearcher对象,参数为IndexReader

4.创建一个Query对象,包含要搜索的域以及内容

5.执行查询,得到一个TopDocs对象,取到查询结果的总记录数,查询结果的文档id列表

6.遍历id列表

7.根据id获取文档对象

8.从document对象中却field的内容

9.关闭IndexReader

(2)、代码实现

	@Test
	public void searchIndex() throws Exception{
		//1.创建索引库位置
		Directory directory = FSDirectory.open(new File("G:\\temp\\index"));
		//2.创建一个IndexReader对象
		IndexReader indexReader = DirectoryReader.open(directory);
		//3.创建一个IndexSearcher对象,参数是IndexReader
		IndexSearcher indexSearcher = new IndexSearcher(indexReader);
		//4.创建一个QUery对象,包含要搜索的域以及内容
		Query query = new TermQuery(new Term("name","apache"));
		//5.执行查询,得到一个topdocs对象
		//参数1:查询对象         参数2:查询结果返回的最大记录数
		TopDocs topdocs = indexSearcher.search(query, 10);
		//获取总记录数
		System.out.println("查询结果的总记录数为:" + topdocs.totalHits);
		//获取查询结果的文档id列表
		ScoreDoc[] docs = topdocs.scoreDocs;
		//6.遍历id列表
		for (ScoreDoc scoreDoc : docs) {
			//获取文档id
			int docID = scoreDoc.doc;
			//根据文档id获取文档对象
			Document document = indexSearcher.doc(docID);
			//从document对象中获取field的内容
			System.out.println(document.get("name"));
			System.out.println(document.get("path"));
			System.out.println(document.get("content"));
			System.out.println(document.get("size"));
		}
		//7.关闭indexReader对象
		indexReader.close();
	}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值