Lucene学习教程——Lucene查找索引
来源:互联网 发布:nginx header传递吗 编辑:程序博客网 时间:2024/06/09 18:42
一. 前言
上一篇文章学习了Lucene索引的创建,这篇文章将介绍如何实现搜索。
二. 代码实现
package com.yc.lucene.study;import java.io.File;import java.io.IOException;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.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;/** * 索引的搜索 * @author HM * */public class Searcher {public void SearcherIndex(){Directory directory=null;DirectoryReader dReader=null;try {//1.创建Directory,(我们要知道我们要去哪里搜索)directory=FSDirectory.open(new File("G:/lucene/index01"));//3.我们要读取这个索引文件 dReader=DirectoryReader.open(directory);//4.我们需要创建一个IndexSearch对象 , 根据DirectoryReader创建IndexSearcherIndexSearcher searcher=new IndexSearcher(dReader);//4.创建查询的Query (创建查询的字符串,与sql语句一样) //创建Parser来确定要搜索的内容Analyzer analyzer=new StandardAnalyzer(Version.LUCENE_43); //三个参数:版本号,搜索的域,分词器必须与创建索引的分词器一样QueryParser parser=new QueryParser(Version.LUCENE_43, "content",analyzer); //通过QuerParser来创建我们的Query,表示搜索与content中包含java的文档Query query=parser.parse("JAVA"); //这里面存放的就是我们要搜索的内容,就是在content域中搜索包含“时候”的文字//5.根据Searcher的搜索返回一个TopDocs的文档TopDocs tds=searcher.search(query, 10); //放一个query,和一个查询的条数//6.根据TopDocs获取一个ScoreDoc对象。ScoreDoc[] sds=tds.scoreDocs;//每一个文档id都放在tds中 的scoreDocs中//然后我们循环获取Doc的Id,来获取具体的Document对象for (ScoreDoc scoreDoc : sds) {//7.根据Seacher和ScoreDoc对象获取具体的Document对象Document doc=searcher.doc(scoreDoc.doc); //通过Searcher来获取这篇文档,传入一个doc 的Id值//8.根据Document对象获取我们所需要的具体的值System.out.println("文件的名称"+doc.get("filename"));System.out.println("文件的路径"+doc.get("path"));}} catch (IOException e) {e.printStackTrace();} catch (ParseException e) {e.printStackTrace();}finally{try {//9.关闭相关资源if(directory!=null) directory.close();if(dReader!=null) dReader.close();} catch (IOException e) {e.printStackTrace();}}}}Ps: 因为这里我采用的是简单分词,所以对中文的分词效果不是很好,我这里搜索的是"Java"
Query query=parser.parse("JAVA");因此我又重新在《改变就在一瞬间》.txt书中加了一句:I like Java 然后重新创建索引。
2.1 测试结果
同样我采用的是Junit测试:
结果输出:
Ps: 对于如何搜索:代码中都有详细的注释。
下一篇将介绍如何删除索引和更新索引
1 0
- Lucene学习教程——Lucene查找索引
- Lucene学习教程——Lucene索引创建
- Lucene学习教程——Lucene介绍
- lucene教程 之建立,查找,删除索引
- lucene学习——索引的建立
- Lucene——索引删改
- lucene学习----创建索引
- Lucene学习总结-索引
- Lucene学习总结(二) lucene索引文件格式
- Lucene教程(一) 创建索引
- 01_java Lucene学习——创建索引
- lucene学习笔记(一)——索引的建立
- lucene学习教程
- lucene学习教程
- lucene学习教程
- lucene学习教程
- lucene学习教程
- Lucene学习资料(索引机制)
- 最长重复子串(可重叠)
- 使用udev方式绑定RAC共享存储脚本
- vc6.0转vs2005中字符串的问题
- 安装sklearn
- C语言基础教学——认识C语言(第一课)
- Lucene学习教程——Lucene查找索引
- 博客转移通知
- SPDK meetup event
- http://blog.csdn.net/start530/article/details/21483729
- vc中实现控件的隐藏与显示
- 同步和异步的异同
- maven pom.xml报错
- Linux 命令(文件和目录管理 - ls)
- perl学习笔记-----------------------(4)