Lucene实战之基于StandardAnalyzer读写索引
前言
使用lucene创建索引时如果指定了解析器,则需要读写都使用这个解析器,目前我发现也就是在处理中文这块比较麻烦,像你在使用solr时如果配置了ik分词,则需要把index清空重新创建才能继续搜索。
本篇引用lucene-6.4.0和4.x的几个关键类会有不同的地方。
创建索引
public void index(){
Directory dir=null;
Analyzer analyzer=null;
IndexWriterConfig config=null;
IndexWriter indexWriter=null;
try{
/**
* SimpleFSDirectory 不能很好支持多线程操作
* **/
dir =new SimpleFSDirectory(Paths.get(INDEX_URL));
analyzer=new StandardAnalyzer();
config =new IndexWriterConfig(analyzer);
/**
* IndexWriter(Directory d,IndexWriterConfig config)
* **/
indexWriter =new IndexWriter(dir,config);
indexWriter.deleteAll();
List<UploadBook> books =bookDao.listAllBooks();
Document document=null;
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
for(UploadBook book:books){
document=new Document();
document.add(new Field("id",book.getId().toString(), TextField.TYPE_STORED));
document.add(new Field("ip",book.getIp(), TextField.TYPE_STORED));
document.add(new Field("title",book.getOriginFileName(), TextField.TYPE_STORED));
document.add(new Field("content", PdfReader.read(INDEX_PDF+book.getNewFileName()),TextField.TYPE_STORED));
document.add(new Field("createtime",formatter.format(book.getCreateTime()), TextField.TYPE_STORED));
indexWriter.addDocument(document);
}
indexWriter.commit();
System.out.println("======索引创建完成,公创建"+books.size()+"条索引========");
}catch (IOException ex){
ex.printStackTrace();
}
catch(Exception ex){
ex.printStackTrace();
}finally {
if(indexWriter !=null){
try{
indexWriter.close();
}catch (IOException ex){
System.out.println("======indexWriter close exception========");
}
}
}
}
读取索引
public static List<Book> search2(String kw){
Directory dir=null;
Analyzer analyzer=null;
List<Book> list = new ArrayList<Book>();
try{
dir= FSDirectory.open(Paths.get("e:\\soso\\index"));
analyzer=new StandardAnalyzer();
DirectoryReader reader =DirectoryReader.open(dir);
IndexSearcher searcher=new IndexSearcher(reader);
QueryParser parser=new QueryParser("content",analyzer);
Query query =parser.parse(kw);
ScoreDoc[] docs=searcher.search(query,100).scoreDocs;
for (int i = 0; i < docs.length; i++) {
Document firstHit = searcher.doc(docs[i].doc);
Book book=new Book();
book.setId(Integer.parseInt(firstHit.getField("id").stringValue()));
book.setIp(firstHit.getField("ip").stringValue());
String title=firstHit.getField("title").stringValue();
title=title.substring(0,title.lastIndexOf("."));
book.setTitle(title);
String content=firstHit.getField("content").stringValue();
if(content.length()>=500){
content=content.substring(0,500)+"......";
}
book.setContent(content);
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-mm");
Date date =format.parse(firstHit.getField("createtime").stringValue());
book.setCreateTime(format.format(date));
list.add(book);
}
}catch(Exception ex){
}finally {
try{
dir.close();
}catch(IOException ex){
ex.printStackTrace();
}
}
return list;
}
Lucene实战之基于StandardAnalyzer读写索引的更多相关文章
- Lucene实战构建索引
搭建lucene的步骤这里就不详细介绍了,无外乎就是下载相关jar包,在eclipse中新建java工程,引入相关的jar包即可 本文主要在没有剖析lucene的源码之前实战一下,通过实战来促进研究 ...
- lucene全文搜索之三:生成索引字段,创建索引文档(给索引字段加权)基于lucene5.5.3
前言:上一章中我们已经实现了索引器的创建,但是我们没有索引文档,本章将会讲解如何生成字段.创建索引文档,给字段加权以及保存文档到索引器目录 luncene5.5.3集合jar包下载地址:http:// ...
- Lucene实战之初体验
前言 最早做非结构化数据搜索时用的还是lucene.net,一直说在学习java的同时把lucene这块搞一搞,这拖了2年多了,终于开始搞这块了. 开发环境 idea2016.lucene6.0.jd ...
- Lucene实战(第2版)》
<Lucene实战(第2版)>基于Apache的Lucene 3.0,从Lucene核心.Lucene应用.案例分析3个方面详细系统地介绍了Lucene,包括认识Lucene.建立索引.为 ...
- 3.2 Lucene实战:一个简单的小程序
在讲解Lucene索引和检索的原理之前,我们先来实战Lucene:一个简单的小程序! 一.索引小程序 首先,new一个java project,名字叫做LuceneIndex. 然后,在project ...
- 深度学习实战篇-基于RNN的中文分词探索
深度学习实战篇-基于RNN的中文分词探索 近年来,深度学习在人工智能的多个领域取得了显著成绩.微软使用的152层深度神经网络在ImageNet的比赛上斩获多项第一,同时在图像识别中超过了人类的识别水平 ...
- C++ MFC实现基于RFID读写器的上位机软件
C++ MFC实现基于RFID读写器的上位机软件 该博客涉及的完整工程托管在https://github.com/Wsine/UpperMonitor,觉得好请给个Star (/▽\=) 运行和测试环 ...
- ASP.NET Core 实战:基于 Dapper 扩展你的数据访问方法
一.前言 在非静态页面的项目开发中,必定会涉及到对于数据库的访问,最开始呢,我们使用 Ado.Net,通过编写 SQL 帮助类帮我们实现对于数据库的快速访问,后来,ORM(Object Relatio ...
- R语言实战实现基于用户的简单的推荐系统(数量较少)
R语言实战实现基于用户的简单的推荐系统(数量较少) a<-c(1,1,1,1,2,2,2,2,3,3,3,4,4,4,5,5,5,5,6,6,7,7) b<-c(1,2,3,4,2,3,4 ...
随机推荐
- SpringBoot2.x配置JsonRedisSerializer
@Configurationpublic class SpringCacheRedisConfig { @Bean public RedisCacheManager cacheManager(Redi ...
- Paper | Contrast Limited Adaptive Histogram Equalization
目录 1. 背景 1.1. 对比度和直方图均衡HE 1.2. HE的问题 1.3. AHE 1.4. 底噪问题 2. CLAHE 2.1. 效果展示 2.2. 算法格式和细节 论文:Contrast ...
- modbus转乐鑫物联网平台上传工具
乐鑫平台推荐个人用户使用 界面比较简洁
- 冲刺博客NO.10
今天做了什么:将程序整合到一起,出现了不少小错误,但是在讨论后都解决了. 遇到的难题:没遇到什么大困难
- DRF 商城项目 - 日志处理
logging 模块 logging 模块是最基本的日志处理模块 缺陷 但是拥有一些很致命的缺陷 要求用户主动查询, 需要登录到服务器才可以查看日志文件 自带的报错外部通知也没办法判断同类取舍, 短 ...
- Redis集群环境使用的是redis4.0.x的版本,在用java客户端jedisCluster启动集群做数据处理时报java.lang.NumberFormatException: For input string: "7003@17003"问题解决
java.lang.NumberFormatException: For input string: "7003@17003" at java.lang.NumberFormatE ...
- 《你不知道的javascript》读书笔记2
概述 放假读完了<你不知道的javascript>上篇,学到了很多东西,记录下来,供以后开发时参考,相信对其他人也有用. 这篇笔记是这本书的下半部分,上半部分请见<你不知道的java ...
- zookeeper常用指令
zk服务 bin 目录下常用的脚本解释 zkCleanup 清理 Zookeeper 历史数据,包括日志文件和快照数据文件 zkCli Zookeeper 的一个简易客户端 zkEnv 设置 Zook ...
- HttpRunner框架(一)
HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试.性能测试.线上监控.持续集成等多种测试需求. 中文使用文档地址:h ...
- 带你入门Python爬虫,8个常用爬虫技巧盘点
python作为一门高级编程语言,它的定位是优雅.明确和简单. 我学用python差不多一年时间了, 用得最多的还是各类爬虫脚本, 写过抓代理本机验证的脚本.写过论坛中自动登录自动发贴的脚本 写过自动 ...