Lucene学习(入门)

一 概述

程序是顺序执行执行的,想要尽快搞懂代码的编写逻辑,最好顺序看看代码,找到核心对象。

二 实例

1. 创建索引库(为每个文件)

   逻辑:核心对象 indexWriter   (索引存储路径,分析器配置)

             File对象    (要分析的文件)

             创建Field对象,   (域名,域内容,是否存储)

             创建document对象,document.add(field)        

             indexWriter.add(document)    加入索引库

2. 查询索引库

   逻辑:核心对象 indexSearcher

            创建term对象       术语 (域名,关键字)

            创建query对象   TermQuery(term)

            indexSearcher.search(query,结果设置)

            获得

1.代码

建立索引库

package com.blueSky.lucene;

import java.io.File;
import org.apache.commons.io.FileUtils;
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.LongField;
import org.apache.lucene.document.StoredField;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
import org.junit.Test;

public class MySnippet {
	@Test
	public void createIndex() throws Exception{
		FSDirectory directory = FSDirectory.open(new File("F:\\temp\\index"));   //创建索引目录位置
	    StandardAnalyzer analyzer = new StandardAnalyzer();    //创建一个标准分析器
		IndexWriterConfig config = new IndexWriterConfig(Version.LATEST, analyzer);
		//创建idexWriter对象
		IndexWriter indexWriter = new IndexWriter(directory, config);
		//文件对象
		File file = new File("F:\\lucene_example\\全文检索.txt");
		String fileName = file.getName();
		String path = file.getPath();
		String fileContent = FileUtils.readFileToString(file);
		long size = FileUtils.sizeOf(file);
		//创建Field对象
		Field field_fileName = new TextField("fileName",fileName,Store.YES);
		Field field_filePath = new StoredField("filePath",path); //不分析,不索引,只存储(storedField) 
		Field field_fileSize = new LongField("fileSize",size,Store.YES);
		Field field_fileContent = new TextField("fileContent",fileContent,Store.YES);
		
		//创建Document对象 添加field(域)
		Document document = new Document();
		document.add(field_fileName);
		document.add(field_fileContent);
		document.add(field_fileSize);
		document.add(field_filePath);
		//添加到索引库
		indexWriter.addDocument(document);
		
		indexWriter.close();
	}
}

2. 查询索引

package com.blueSky.lucene;

import java.io.File;
import java.io.IOException;

import javax.management.Query;

import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.FSDirectory;
import org.junit.Test;

public class MySnippet_index {
	@Test
	public void indexTest() throws Exception{
		FSDirectory directory = FSDirectory.open(new File("F:\\temp\\index"));
		IndexReader indexReader = DirectoryReader.open(directory);
		//创建indexSearcher对象
		IndexSearcher indexSearcher = new IndexSearcher(indexReader);
		//创建TermQuery对象(术语查询)
		Term term = new Term("fileName", "全"); //在fileName域中检索
		TermQuery query = new TermQuery(term);
		//查询(Query为条件)
		TopDocs topDocs = indexSearcher.search(query, 10);  //最多返回10条 
		ScoreDoc[] scoreDocs = topDocs.scoreDocs;  
		for (ScoreDoc scoreDoc : scoreDocs) {  
			// scoreDoc.doc属性就是document对象的id
			// 根据document的id找到document对象
			Document document = indexSearcher.doc(scoreDoc.doc);
			System.out.println(document.get("fileName"));
			System.out.println(document.get("fileContent"));
			System.out.println(document.get("filePath"));
			System.out.println(document.get("fileSize"));
		}
		
		indexReader.close();
	}
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值