lucene搜索引擎总结二

<pre name="code" class="java">package com.cn.zsj.lucene;

import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;

/*
 * 特别强调,本篇文章与总结一构建索引文件密切相关,请参考本人博客的lucene总结一
 * 这里用到的包有
 * lucene-analyzers-common-5.3.0.jar
 * lucene-core-5.3.0.jar
 * lucene-queryparser-5.3.0.jar
 * 
 */
public class TestSearch {
private static IndexSearcher searcher=null;
	public static void main(String[] args) {
		// TODO Auto-generated method stub
try {
	TestSearch.getResult();
} catch (IOException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
} catch (ParseException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}
	}
/*
 * 第一步
 * 利用IndexSearcher,QueryParser,Query,TopDocs构造要检索的的关键字,从而得出结果集TopDocs
 */
public static TopDocs getHits() throws IOException, ParseException{
	Path indexPath=Paths.get("f:\\indexPath");//根据索引文件所在文件系统的uri建立Path对象
	Directory dir=FSDirectory.open(indexPath);//根据索引路径构建Directory对象
	IndexReader reader=DirectoryReader.open(dir);//根据索引目录构建IndexReader对象
	 searcher=new IndexSearcher(reader);//调用构造方法,创建IndexReader对象,还有很多重载的构造方法,自己看API了解
	Analyzer analyzer=new StandardAnalyzer();
	QueryParser parser=new QueryParser("content",analyzer);//第一个String参数是要查询的Document中Field字段的键名,不知道content指代什么的请回看lucene总结一
	Query query=parser.parse("老百姓");//这里是指明要查询的关键字
	TopDocs hits=searcher.search(query, 10);//调用IndexSearcher的search()方法,第二个参数是要查询的结果集条数,跟ResultSet差不多的意思
	return hits;
}
/*
 * 第二步
 * 遍历结果集,检索用户输入的关键字对应的搜索结果
 */
public static void getResult() throws IOException, ParseException{
	TopDocs hits=TestSearch.getHits();//获取结果集,这其实是个文档的集合
    //此时我们可以简单的TopDocs中totalHits字段测试根据输入的关键字是否有对应的结果,
	int hitsLength=hits.totalHits;
	Document doc=null;
	System.out.println(hitsLength);//输入结果集中的结果数
	for(int i=0;i<hitsLength;i++){
		doc=searcher.doc(hits.scoreDocs[i].doc);//调用IndexSearcher的doc()方法,参数是文档编号,获取结果集中的文档
		System.out.println("查询关键字'老百姓'返回的文档名字为"+doc.get("filename"));//这里的get()参数为|Field字段的键名,在总结一中可以看到我在Document对象中添加了filename字段
	}
	
	
}
}

看看运行结果如何:



                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值