Lucene的学习之旅

Lucene全文检索,它是apache公司研发,用于开发全文检索引擎的工具包。

Lucene开发要使用JDK1.7,高版本要使用1.8。

步骤

1、到官网下载jar包

下载地址:http://archive.apache.org/dist/lucene/java/     可以找到所有版本

2、导入jar包

Lucene包,可以在版本包中找到


在Lucene开发中会用到文件操作,所以导入了相关依赖包


3、Lucene开发

代码部分不过多讲解,粘贴一段代码自己领悟

package com.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;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.document.StoredField;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
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.junit.Test;

public class LuceneManager {
	
	/**  
	 * 以下代码为创建索引并将索引和文档信息写入索引库  
	 * @author BL  
	 */
	@Test
	public void addIndex() throws Exception{
		
		//1、指定索引库的存放位置Directory对象  
        Directory directory = FSDirectory.open(new File("E:\\lucene-temp\\index").toPath());  
        //2、指定分析器,对文档内容进行分析  
        Analyzer analyzer = new StandardAnalyzer();  
        IndexWriterConfig indexWriterConfig = new IndexWriterConfig(analyzer);  
        //3、创建IndexWriter对象  
        IndexWriter indexWriter = new IndexWriter(directory, indexWriterConfig);  
          
        //4、获取目录文档并循环处理  
        File files = new File("E:\\lucene-temp\\files");  
        File[] listFiles = files.listFiles();  
        for (File file : listFiles) {  
            //5、创建Document对象  
            Document document = new Document();  
              
            //6、创建Field对象  
            //创建“文件名称”Field对象(TextField设置为分析、索引、保存)  
            String file_name = file.getName();  
            Field fileNameField = new TextField("fileName", file_name, Store.YES);  
            //创建“文件大小”Field对象(StoredField设置为不分析、不索引、仅保存)  
            String file_size = FileUtils.sizeOf(file) + "";  
            Field fileSizeField = new StoredField("fileSize", file_size);  
            //创建“文件路径”Field对象(StoredField设置为不分析、不索引、仅保存)  
            String file_path = file.getPath();  
            Field filePathField = new StoredField("filePath", file_path);  
            //创建“文件内容”Field对象(TextField设置为分析、索引、保存)  
            String file_context = FileUtils.readFileToString(file);  
            Field fileContextField = new TextField("fileContext", file_context, Store.YES);  
              
            //7、将Field对象添加到Document对象中  
            document.add(fileNameField);  
            document.add(fileSizeField);  
            document.add(filePathField);  
            document.add(fileContextField);  
              
            //8、将Document对象添加到IndexWriter对象中并创建索引,然后将索引和Document对象写入索引库。  
            indexWriter.addDocument(document);  
              
        }  
        //9、关闭IndexWriter对象  
        indexWriter.close();  
		
	}
	
	/**  
	 * 索引库查询索引  
	 * @author BL  
	 */
	@Test
	public void getIndex() throws Exception{
		
		//1、创建Directory对象,就是索引库的存放位置
		Directory directory = FSDirectory.open(new File("E:\\lucene-temp\\index").toPath());
		//2、创建IndexReader对象,需要指定Directory对象
		IndexReader indexReader = DirectoryReader.open(directory);
		//3、创建indexSearcher对象,需要指定IndexReader对象
		IndexSearcher indexSearcher = new IndexSearcher(indexReader);
		//4、创建TermQuery对象,指定查询的域和查询的关键字
		Query query = new TermQuery(new Term("fileName","txt"));
		//5、执行查询,需要指定Query对象和要查询的条数
		TopDocs topDocs = indexSearcher.search(query, 2);
		//6、返回查询结果,遍历查询结果并输出
		ScoreDoc[] scoreDocs = topDocs.scoreDocs;
		for (ScoreDoc scoreDoc : scoreDocs) {
			int docID = scoreDoc.doc;
			//根据文档ID获取到Document对象
			Document doc = indexSearcher.doc(docID);
			System.out.println(doc.get("fileName"));
			System.out.println(doc.get("fileSize"));
			System.out.println(doc.get("filePath"));
			System.out.println(doc.get("fileContext"));
		}
		//7、关闭IndexReader对象
		indexReader.close();
		
	}
	

}

4、执行Lucene代码

执行Lucene代码后,会在指定索引库的存放位置中生成一些索引文件,见下图。


5、使用Luke工具查看

Luke工具是查看Lucene索引的可视化工具

选择指定索引库的存放位置,如下图;


进入主页面,可查看索引信息。


到这里Lucene的整体开发流程就已完成。


注意:Luke版本和Lucene版本必须要一致,不然打开Luke工具时会报错,错误如下图。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值