lucene4.0入门1
博客专区 > 明舞 的博客 > 博客详情
lucene4.0入门1
明舞 发表于3年前
lucene4.0入门1
  • 发表于 3年前
  • 阅读 31
  • 收藏 0
  • 点赞 0
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

Lucene主要分为三大块:

1、创建索引

2、分词

3、读取并查询索引

前提:由于本人目前看的是3.5的视频材料,所以可能里面有的写法还是3.5的写法,我能保证demo能跑通,能运营,能明白意思。

发现在lucene3.5里,lucene的主要jar都在core包里,但是在4.0以后好像被拆分成了多个jar,需要根据项目需要,一点一点自己往上加jar包。

所用jar:   lucene 4.10.2

教学视频:lucene 3.5

依赖的jar包:

入门代码1:

package com.test;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;

public class HelloLucene2 {
	@SuppressWarnings("deprecation")
	public void index() throws Exception {
		
		
		//创建directory,主要为了存储索引存放的路径
		//Directory directory = new RAMDirectory();// 建立在内存中
		Directory fsddirectory = FSDirectory.open(new File(
				"D:/lucene-file/index01"));//建立在硬盘上
		//indexwriter的配置信息
		IndexWriterConfig IndexWriterConfig = new IndexWriterConfig(
				Version.LATEST, new StandardAnalyzer(Version.LATEST));
		//indexwriter主要是用来写索引的,类似于file流
		IndexWriter writer = new IndexWriter(fsddirectory, IndexWriterConfig);
		//document类似于一条数据,存放数据信息
		Document document = null;
		//field类似于字段,用于存放数据的每个分类信息
		File f = new File("D:/lucene-file/exampletxt");
		for (File file : f.listFiles()) {
			document = new Document();
			document.add(new Field("content", new FileReader(file)));
			document.add(new Field("filename", file.getName(), Field.Store.YES,
					Field.Index.NOT_ANALYZED));
			document.add(new Field("path", file.getAbsolutePath(),
					Field.Store.YES, Field.Index.NOT_ANALYZED));
			writer.addDocument(document);
		}
		if (writer != null) {
			writer.close();
		}

	}
	
	public void search() throws Exception {
		//主要流程:
		//1:创建directory   从哪读取信息与资料
		Directory fsddirectory = FSDirectory.open(new File(
				"D:/lucene-file/index01"));//放在硬盘上的信息源
		//2:创建indexReader  //读取Index索引
		IndexReader reader = IndexReader.open(fsddirectory);
		//3:根据indexReader创建IndexSearcher
		IndexSearcher searcher = new IndexSearcher(reader);
		//4:创建搜索的Query
		//需要创建parser来确定要搜索的文件的内容,第二个参数表示搜索的域
		 QueryParser parser = new QueryParser(Version.LATEST, "content",new StandardAnalyzer(Version.LATEST));
		 //表示域中包含徐这个字的文档	
		 Query query = parser.parse("java");
		 //5:根据 searcher搜索并且返回TopDocs,类似于数据库的结果集
		 //10代表搜索10条, 
		 TopDocs tds = searcher.search(query, 10);
		//6:根据TOPDocs获取ScoreDoc对象
		 ScoreDoc[] sds =tds.scoreDocs;
		//7:根据searcher和ScordDoc对象获取具体的Document对象
		 for (ScoreDoc scoreDoc : sds) {
			 Document d = searcher.doc(scoreDoc.doc);
			System.out.println(d.get("filename"));
			System.out.println(d.get("path"));
			System.out.println("---------");
		}
		 
		 System.out.println("length"+sds.length);
		
		//8:根据Document对象获取需要的值
		//9:关闭reader
		reader.close();
	}

}

test类:

package com.junittest;

import static org.junit.Assert.*;

import org.junit.Test;

import com.test.HelloLucene2;

public class TestLucene {

/*	@Test
	public void testindex() throws Exception {
		HelloLucene2 hl = new HelloLucene2();
		hl.index();
	}*/
	@Test
	public void testsearch() throws Exception {
		HelloLucene2 hl = new HelloLucene2();
		hl.index();
		hl.search();
	}

}


  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 209
博文 423
码字总数 516510
×
明舞
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: