lucene笔记-001-新建索引和读取索引

来源:互联网 发布:淘宝模特纹身 编辑:程序博客网 时间:2024/06/05 07:08
package com.test.lucene;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.Store;import org.apache.lucene.document.LongField;import org.apache.lucene.document.StoredField;import org.apache.lucene.document.TextField;import org.apache.lucene.index.DirectoryReader;import org.apache.lucene.index.IndexWriter;import org.apache.lucene.index.IndexWriterConfig;import org.apache.lucene.index.Term;import org.apache.lucene.search.IndexSearcher;import org.apache.lucene.search.Query;import org.apache.lucene.search.ScoreDoc;import org.apache.lucene.search.TermQuery;import org.apache.lucene.search.TopDocs;import org.apache.lucene.store.Directory;import org.apache.lucene.store.FSDirectory;import org.apache.lucene.util.Version;import org.junit.Test;public class Lucene001 {/** * 创建索引 *  * @throws Exception */@Testpublic void testInedx() throws Exception {// 第一步:新建工程,导入JAR包// 第二步:创建IndexWriter对象// 1)将索引保存在内存中:// Directory directory = new RAMDirectory();// 2)将索引保存在磁盘中:Directory directory = FSDirectory.open(new File("D:/bbb/temp/index"));Analyzer analyzer = new StandardAnalyzer();IndexWriterConfig config = new IndexWriterConfig(Version.LATEST, analyzer);IndexWriter iWriter = new IndexWriter(directory, config);// 第三步:读取待操作文档File f = new File("D:/bbb/temp/sourse");File[] listFiles = f.listFiles();if (listFiles.length > 0) {for (File file : listFiles) {// 创建Document对象Document doc = new Document();// 文件名称String file_name = file.getName();doc.add(new TextField("file_name", file_name, Store.YES));// 文件大小long file_size = FileUtils.sizeOf(file);doc.add(new LongField("file_size", file_size, Store.YES));// 文件路径String file_path = file.getPath();doc.add(new StoredField("file_path", file_path));// 文件内容String file_content = FileUtils.readFileToString(file);doc.add(new TextField("file_content", file_content, Store.YES));// 第四步:将Document对象写入索引库iWriter.addDocument(doc);}}// 第五步:关闭IndexWriter对象iWriter.close();}/** * 查询索引 *  * @throws Exception */@Testpublic void testSearch() throws Exception {// 第一步:创建一个Directory对象(索引库位置)Directory directory = FSDirectory.open(new File("D:/bbb/temp/index"));// 第二步:创建一个DirectoryReader对象DirectoryReader ireader = DirectoryReader.open(directory);// 第三步:创建一个IndexSearcher对象IndexSearcher isearcher = new IndexSearcher(ireader);// 第四步:创建一个TermQuery对象(需要查询的域和关键词)Query query = new TermQuery(new Term("file_content", "lucene"));// 第五步:执行查询TopDocs topDocs = isearcher.search(query, 10);// 第六步:返回查询结果数组ScoreDoc[] scoreDocs = topDocs.scoreDocs;if (scoreDocs.length > 0) {for (ScoreDoc scoreDoc : scoreDocs) {System.out.println("----------start----------");Document document = isearcher.doc(scoreDoc.doc);// 文件名称String file_name = document.get("file_name");System.out.println(file_name);// 文件大小String file_size = document.get("file_size");System.out.println(file_size);// 文件路径String file_path = document.get("file_path");System.out.println(file_path);// 文件内容String file_content = document.get("file_content");System.out.println(file_content);System.out.println("-----------end-----------");}// 第七步:关闭DirectoryReader对象ireader.close();}}}