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.index.IndexableField;
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 java.io.IOException;
import java.nio.file.Paths;
import java.util.List; /**
* 直接读取lucene文件内容
*/
public class ReadLuceneFileTest { public static void main(String[] args) {
test1();
} public static void test1(){
//得到读取索引文件的路径
Directory dir= null;
try {
dir = FSDirectory.open(Paths.get("F:\\index"));
} catch (IOException e) {
System.out.println("IOException of open file,异常信息:"+e.getMessage());
e.printStackTrace();
} //通过dir得到的路径下的所有的文件
IndexReader reader= null;
try {
reader = DirectoryReader.open(dir);
} catch (IOException e) {
System.out.println("发生获取文件目录内容异常,异常信息:"+e.getMessage());
e.printStackTrace();
} //公共是多少文件,也就是最大文档数
System.out.println("最大文档数:"+reader.maxDoc()); //读取的实际文档数
System.out.println("实际文档数:"+reader.numDocs());
//建立索引查询器
IndexSearcher is=new IndexSearcher(reader);
//实例化分析器
Analyzer analyzer=new StandardAnalyzer();
//建立查询解析器
/**
* 第一个参数是要查询的字段;
* 第二个参数是分析器Analyzer
* */
QueryParser parser=new QueryParser("DOC_ID", analyzer); //根据传进来的p查找
Query query= null;
try {
query = parser.parse("*:*");
} catch (ParseException e) {
System.out.println("解析异常,异常信息:"+e.getMessage());
e.printStackTrace();
}
//计算索引开始时间
long start=System.currentTimeMillis();
//开始查询
/**
* 第一个参数是通过传过来的参数来查找得到的query;
* 第二个参数是要出查询的行数
* */
TopDocs hits= null;
try {
hits = is.search(query, 5);
} catch (IOException e) {
System.out.println("搜索异常,异常信息:"+e.getMessage());
e.printStackTrace();
}
//计算索引结束时间
long end=System.currentTimeMillis(); System.out.println("匹配 "+"DOC_ID"+" ,总共花费"+(end-start)+"毫秒"+"查询到"+hits.totalHits+"个记录"); //遍历hits.scoreDocs,得到scoreDoc
/**
* ScoreDoc:得分文档,即得到文档
* scoreDocs:代表的是topDocs这个文档数组
* @throws Exception
* */
for(ScoreDoc scoreDoc:hits.scoreDocs){
Document doc= null;
try {
doc = is.doc(scoreDoc.doc);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(doc);
List<IndexableField> list= doc.getFields();
for (IndexableField indexableField : list) {
System.out.println(indexableField.name()+" : "+doc.get(indexableField.name()));
}
System.out.println("****************");
}
//关闭reader
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
} }

最新文章

  1. 我将系统从Windows迁移至Linux下的点点滴滴
  2. css使一行文字竖向排列
  3. js页面跳转参考代码大全
  4. javascript 中==和===的区别
  5. C# 文件流基本操作步骤
  6. TJU 4087. box
  7. Struts2学习笔记(二):第一个Struts2应用
  8. 【翻译】MVC Music Store 教程-概述(三)
  9. asp.net导出Excel类库
  10. Win7/Win8.1升级Win10后屏幕一直闪烁怎么办?
  11. 安装Feflow遇取的问题
  12. Vue基本使用和指令集
  13. Debug技巧
  14. mac rsync文件传输
  15. NOIP2018 退役记
  16. python-redis列表模式
  17. Office PPT如何切换到返回幻灯片
  18. No rabbit death problem
  19. Java-Runoob:Java Scanner 类
  20. Reporting Service服务SharePoint集成模式安装配置(8、配置用于SharePoint 2010的Reporting service模式)

热门文章

  1. Mysql中的 的 Cascade ,NO ACTION ,Restrict ,SET NULL
  2. zepto自定义事件
  3. [Mugeda HTML5技术教程之8]添加行为
  4. mysql日志文件相关的配置【2】
  5. 【原创】基于部署映像服务和管理(DISM)修改映象解决WIN7 USB3.0安装时报错
  6. (摘)ORACLE DBA的职责
  7. document.readystate
  8. javascript 中ASCII字符值转换
  9. linux vmstat使用说明
  10. Linux企业级项目实践之网络爬虫(12)——处理HTTP应答头