一:创建索引库
(1)、步骤分析
1、创建一个java工程
2、把luncene使用的jar包添加到工程
3、创建一个Directory对象,可以保存到内容中。通常是保存到磁盘上
4、创建一个IndexWriter对象,包含Directory和IndexWriterConfig两个对象,IndexWriterConfig中又有Version和Analyzer两个参数
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();
}