no segments* file found in SimpleFSDirectory问题总结

lucene6.0版本

场景一:第一次启动程序索引库为空抛出异常

最近在写lucene发现利用lucene6.0版本时候如果索引库为空构建indexWriter,代码如下:

IndexWrterConfig config = new IndexWriterConfig(analyzer);
IndexWriter indexWriter = new IndexWriter(config);
IndexReader reader = IndexReader.open(directory); 

程序顺序执行上面代码块是正常的,但是调用iIndexReader reader = IndexReader.open(directory); 后报错“no segments* file”。

解决办法:在获取indexWriter对象后手动commit一次建立索引库版本信息,最终问题解决!代码如下:

IndexWrterConfig config = new IndexWriterConfig(analyzer);
IndexWriter indexWriter = new IndexWriter(config);
indexWriter.commit();//手动提交一次
IndexReader reader = IndexReader.open(directory); 

场景二:提交文档并提交以后再次启动抛出异常

异常原因:可能是文件读写异常终止以后,程序再次启动时候,lucene对索引库进行合并读取操作,信息缺失,索引库读取和合并操作失败。

解决办法:在indexWriter.commit()后没有调用indexWriter.close()方法,此时文档内容为空

场景三:程序异常终止(手动杀死进程,造成索引库未写入全)

解决办法:可以用如下代码修复索引,会帮你删除损坏的索引文件

/*** @param source 索引源* @param dest 索引目标* @param indexWriterConfig 配置相关*/
public static void recoveryIndex(String source, String dest, IndexWriterConfig indexWriterConfig) {IndexWriter indexWriter = null;try {indexWriter = new IndexWriter(FSDirectory.open(Paths.get(dest)), indexWriterConfig);} catch (IOException e) {log.error("", e);} finally {//说明IndexWriter正常打开了,无需恢复if (indexWriter != null && indexWriter.isOpen()) {try {indexWriter.close();} catch (IOException e) {log.error("", e);}} else {//说明IndexWriter已经无法打开,使用备份恢复索引//此处简单操作,先清空损坏的索引文件目录,如果索引特别大,可以比对每个文件,不必全部删除  try {FileUtils.deleteDirectory(new File(dest));FileUtils.copyDirectory(new File(source), new File(dest));} catch(IOException e){log.error("", e);//使用备份恢复出错,那么就使用最后一招修复索引log.info("Check index {} now!", dest);try {IndexUtils.checkIndex(dest);} catch (IOException | InterruptedException e1) {log.error("Check index error!", e1);}}}
}

lucene8.2版本

场景一:第一次启动程序索引库为空抛出异常

第一次启动索引库未空的程序,程序抛出异常代码如下:

		IndexWriterConfig writerConfig = new IndexWriterConfig(analyzer);IndexWriter indexWriter = new IndexWriter(dic,writerConfig);

解决方法:直接在IndexWriterConfig参数中配置索引库不存在时候创建即可,代码如下:

		IndexWriterConfig writerConfig = new IndexWriterConfig(analyzer);writerConfig.setOpenMode(OpenMode.CREATE_OR_APPEND);//解决IndexWriter indexWriter = new IndexWriter(dic,writerConfig);IndexReader reader = DirectoryReader.open(dic);

说明:查询了http://lucene.apache.org/core/8_2_0/core/index.html文档,发现OpenMode有以下三个参数:

APPEND索引库版本信息(索引库是否为空)存在则追加操作
CREATE不管索引版本信息是否存在重新创建索引库
CREATE_OR_APPEND如果索引库存在进行追加,不存在会自动创建

参考博客:

  1. https://blog.csdn.net/jinwufeiyang/article/details/51817822
  2. https://blog.csdn.net/P397226804/article/details/69396370
  3. http://codepub.cn/2016/06/24/Lucene-6-0-in-action-the-index-of-hot-backup-and-recovery/  (该博主是阿里大牛,想学lucene可以看它文章,受益匪浅)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/508892.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

lucene Term查询

查询demo Path path Paths.get(util.Directory.GetAppPath("indexDir"));IndexReader reader DirectoryReader.open(FSDirectory.open(path));//获取IndexSearcher对象IndexSearcher indexSearcher new IndexSearcher(reader);Query query new TermQuery(new Ter…

IndexOptions类说明

IndexOptions是在lucene-core-x.jar包下面,其作用是在新建索引时候选择索引属性。 IndexOptions是一个枚举类: 枚举变量说明: NONE不被索引DOCS_AND_FREQS文档和词频建立索引DOCS_AND_FREQS仅对文档和词频建立索引DOCS_AND_FREQS_AND_POSIT…

【转载保存】lucene正则查询使用注意

今天要分享的是关于lucene中另外一种丰富的查询方式----正则查询,lucene内置了许多的查询API,以及更强大的自定义查询方式的QueryParse,大部分情况下我们使用内置的查询API,基本上就可以满足我们的需求了,但是如果你想…

lucene 各个版本介绍

官方说明文档:https://lucene.apache.org/core/8_3_0/changes/Changes.html#v8.3.0.other 开源中国翻译:https://www.oschina.net/p/lucene

【转载保存】搜索引擎调研文档

搜索引擎选型调研文档 Elasticsearch简介* Elasticsearch是一个实时的分布式搜索和分析引擎。它可以帮助你用前所未有的速度去处理大规模数据。 它可以用于全文搜索,结构化搜索以及分析,当然你也可以将这三者进行组合。 Elasticsearch是一个建立在全…

webmagic抓取实例

git地址:https://github.com/code4craft/webmagic/tree/master/webmagic-samples/src/main/java/us/codecraft/webmagic/samples

lucene详细说明文档

以下部门功能在lucene5以上版本可能有的API所有改变 目录1.简介 2.了解索引操作 2.1倒排索引 2.2字段类型 2.3细分 2.4文件编号 2.5搜索索引 3.创建索引 4.基本索引操作 4.1核心索引类 4.2将数据添加到索引 5.文件和领域 5.1文件 5.2领域 5.3在Lucene中增强文档 1.简介 该索引是…

SimpleDateFormat(线程不安全)与DateTimeFormatter(线程安全)

https://www.liaoxuefeng.com/wiki/1252599548343744/1303985694703650

【转载保存】java8新特性学习

编者注:Java 8已经公布有一段时间了,种种迹象表明Java 8是一个有重大改变的发行版。 在Java Code Geeks上已经有大量的关于Java 8 的教程了,像玩转Java 8——lambda与并发,Java 8 Date Time API 教程: LocalDateTime和…

influxDb 异常:{“error“:“retention policy not found: default“}

第一次用influxDb,通过java客户端插入数据的时候总是报这个异常,后来发现命令行中插入数据是好的,但是客户端就是不行,后来检查代码发现是自己的配置中保留策略名写错了 。 修改代码:将RETENTION_POLICY_DEFAULT值设置…

【转载保存】什么是线程阻塞?为什么会出现线程阻塞?

为什么会出现线程阻塞? 1.睡眠状态:当一个线程执行代码的时候调用了sleep方法后,线程处于睡眠状态,需要设置一个睡眠时间,此时有其他线程需要执行时就会造成线程阻塞,而且sleep方法被调用之后,…

【转载保存】ThreadPoolExecutor类使用详解

线程启动原理线程中断机制多线程实现方式FutureTask实现原理线程池之ThreadPoolExecutor概述线程池之ThreadPoolExecutor使用线程池之ThreadPoolExecutor状态控制线程池之ThreadPoolExecutor执行原理线程池之ScheduledThreadPoolExecutor概述线程池的优雅关闭实践 转载&#x…

maven (http://repo1.maven.org/maven2/): Failed to transfer file 和PKIX path building failed: sun.secu

<?xml version"1.0" encoding"UTF-8"?> <settings xmlns"http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/SETTINGS/1.0.…

java中String、StringBuffer equals使用注意

equals方法 我们知道每个类其基类都是Object&#xff0c;Object默认的equals方式是: public boolean equals(Object obj) {if (this obj) {//先进行地址比较return true;}上面可以看出Object的equals方法比较两个对象的地址是否相等。 接着我们来说下String的equals方法实现…

maven 无效的源发行版11

我看自己的jdk配置都为8&#xff0c;感觉没问题&#xff0c;后来发现自己pom.xml文件配置的如下&#xff1a; <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId>…

去除html,获取某个标签里面内容

Document document Jsoup.parse(content);Elements ps document.getElementsByTag("p");//要解析的标签String pText "";for(Element p: ps){pText pText p.text();}

分布式集群架构场景解决方案学习笔记

课程学习 一致性哈希算法集群时钟同步问题分布式ID解决方案分布式任务调度问题session共享(一致性)问题 一致性哈希算法 一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的&#xff0c;设计目标是为了解决因特网中的热点(Hot spot)问题&#xff0c…

@NotNull和@NonNull区别和使用

https://www.jianshu.com/p/32327ca2365f

常用的lucene分词器-笔记

1、 StopAnalyzer StopAnalyzer能过滤词汇中的特定字符串和词汇&#xff0c;并且完成大写转小写的功能。 2、 StandardAnalyzer StandardAnalyzer根据空格和符号来完成分词&#xff0c;还可以完成数字、字母、E-mail地址、IP地址以及中文字符的分析处理&#xff0c;还可以支…