`

elasticsearch------索引修复

阅读更多

elasticsearch------索引修复

 

在使用基于lucene的各类搜索引擎(如:elasticsearch、solr)时,有可能出现类似如下的错误:
Caused by: java.io.EOFException: read past EOF: NIOFSIndexInput(path="/usr/local/sas/escluster/data/cluster/nodes/0/indices/index/5/index/_59ct.fdt")
这是由lucene的索引损坏了导致的,引起的原因有很多种,比如:复制不完整,硬盘损坏等。
 
由于elasticsearch也是基于lucene的,所以lucene的一些小工具elasticsearch也可以用到,比如luke之类的。lucene里面也有很多比较好用的工具,比如下面要介绍的CheckIndex。它在lucene-core jar包的org.apache.lucene.index目录下。它的功能是检查索引的的健康情况和修复索引。如果检查出某些segments有错误,可以通过-fix参数执行修复操作,修复的过程就是创建一个新的segments,把所有引用错误segments的索引数据删除。
 
使用方法,先定位到es的lib目录下
cd es_home/lib 
 
运行一下命令检查索引
  1. java -cp lucene-core-3.6.1.jar -ea:org.apache.lucene... org.apache.lucene.index.CheckIndex /usr/local/sas/escluster/data/cluster/nodes/0/indices/index/5/index/  
检测结果如下:
 
 
 
Segments file=segments_2cg numSegments=26 version=3.6.1 format=FORMAT_3_1 [Lucene 3.1+] userData={translog_id=1347536741715}
  1 of 26: name=_59ct docCount=4711242
    compound=false
    hasProx=true
    numFiles=9
    size (MB)=6,233.694
    diagnostics = {mergeFactor=13, os.version=2.6.32-71.el6.x86_64, os=Linux, lucene.version=3.6.1 1362471 - thetaphi - 2012-07-17 12:40:12, source=merge, os.arch=amd64, mergeMaxNumSegments=-1, java.version=1.6.0_24, java.vendor=Sun Microsystems Inc.}
    has deletions [delFileName=_59ct_1b.del]
    test: open reader.........OK [3107 deleted docs]
    test: fields..............OK [25 fields]
    test: field norms.........OK [10 fields]
    test: terms, freq, prox...OK [36504908 terms; 617641081 terms/docs pairs; 742052507 tokens]
    test: stored fields.......ERROR [read past EOF: MMapIndexInput(path="/usr/local/sas/escluster/data/cluster/nodes/0/indices/index/5/index/_59ct.fdt")]
java.io.EOFException: read past EOF: MMapIndexInput(path="/usr/local/sas/escluster/data/cluster/nodes/0/indices/index/5/index/_59ct.fdt")
        at org.apache.lucene.store.MMapDirectory$MMapIndexInput.readBytes(MMapDirectory.java:307)
        at org.apache.lucene.index.FieldsReader.addField(FieldsReader.java:400)
        at org.apache.lucene.index.FieldsReader.doc(FieldsReader.java:253)
        at org.apache.lucene.index.SegmentReader.document(SegmentReader.java:492)
        at org.apache.lucene.index.IndexReader.document(IndexReader.java:1138)
        at org.apache.lucene.index.CheckIndex.testStoredFields(CheckIndex.java:852)
        at org.apache.lucene.index.CheckIndex.checkIndex(CheckIndex.java:581)
        at org.apache.lucene.index.CheckIndex.main(CheckIndex.java:1064)
    test: term vectors........OK [0 total vector count; avg 0 term/freq vector fields per doc]
FAILED
    WARNING: fixIndex() would remove reference to this segment; full exception:
java.lang.RuntimeException: Stored Field test failed
        at org.apache.lucene.index.CheckIndex.checkIndex(CheckIndex.java:593)
        at org.apache.lucene.index.CheckIndex.main(CheckIndex.java:1064)
 
 
WARNING: 1 broken segments (containing 4708135 documents) detected
WARNING: 4708135 documents will be lost
在检查结果中可以看到,分片5的_59ct.fdt索引文件损坏,.fdt文件主要存储lucene索引中存储的fields,所以在检查test: stored fields时出错。
下面的警告是说有一个损坏了的segment,里面有4708135个文档。
 
在原来的命令基础上加上-fix参数可以进行修复索引操作(ps:在进行修改前最好对要修复的索引进行备份,不要在正在执行写操作的索引上执行修复。)
 
  1. java -cp lucene-core-3.6.1.jar -ea:org.apache.lucene... org.apache.lucene.index.CheckIndex /usr/local/sas/escluster/data/cluster/nodes/0/indices/index/5/index/ -fix  
执行完后会在原来检查完毕的信息后面会出现以下信息。
NOTE: will write new segments file in 5 seconds; this will remove 4708135 docs from the index. THIS IS YOUR LAST CHANCE TO CTRL+C!
  5...
  4...
  3...
  2...
  1...
Writing...
OK
Wrote new segments file "segments_2ch"
 
表示修复完成,移除了4708135个损坏文档。
 
损坏了4708135个文档,是挺多的了,对于这种损坏文档数太多的情况,一就是直接从之前备份的数据中恢复(如果有的话),还有就是读取索引,记录损坏文档的id,进行修复后重新索引。

 

分享到:
评论

相关推荐

    Elasticsearch-head谷歌插件谷歌插件.zip

    "es-head"是Elasticsearch-head的简写,它允许用户无需编写复杂的curl命令就能与Elasticsearch进行交互。通过这个插件,你可以查看索引的状态,监控节点健康状况,查看集群统计信息,甚至进行索引的创建、删除和映射...

    elasticsearch-analysis-ik-7.15.2和7.14.0.zip

    `elasticsearch-analysis-ik-7.15.2.zip` 和 `elasticsearch-analysis-ik-7.14.0.zip` 之间的差异主要在于它们与Elasticsearch基础版本的兼容性以及可能存在的性能优化和bug修复。随着Elasticsearch版本的更新,...

    elasticsearch-head 的谷歌浏览器(chrome)插件,版本为 0.1.5。

    Elasticsearch-Head 是一款专为Elasticsearch设计的可视化管理工具,它以谷歌浏览器(Chrome)插件的形式存在,方便用户直观地查看和管理Elasticsearch集群的状态、索引、文档等信息。在版本 0.1.5 中,该插件提供了...

    elasticsearch-analysis-ik-7.12.1.zip

    **Elasticsearch IK 分词器 7.12.1** Elasticsearch 是一个流行的开源全文搜索引擎,它基于 Lucene 库,提供了分布式、实时、可扩展的搜索和分析功能。在处理中文文本时,一个关键组件是分词器,因为中文的自然语言...

    最新版windows elasticsearch-7.17.6-windows-x86_64.zip

    首先,版本号7.17.6代表了Elasticsearch的特定更新迭代,通常包含了错误修复、性能优化以及新功能的添加。每个版本的更新都会在官方文档中详细记录,以便用户了解改进之处。 1. **64位系统支持**: "x86_64" 表示这...

    elasticsearch-hadoop-8.8.0

    Elasticsearch有自己的RESTful API,用于索引、搜索、分析和管理数据。通过Elasticsearch-Hadoop,用户可以在Hadoop环境中使用这些API,实现对Elasticsearch集群的操作。 Elasticsearch-Hadoop的主要功能包括: - ...

    elasticsearch-analysis-ik-7.2.0.rar

    Elasticsearch(ES)是一种流行的开源全文搜索引擎,基于Lucene库构建,广泛应用于大数据分析、日志检索和实时搜索等领域。其核心特性包括分布式、可扩展性和高灵活性。在处理中文文本时,Elasticsearch需要依赖特定...

    最新版linux elasticsearch-7.17.1-linux-x86_64.tar.gz

    Elasticsearch是一个开源的全文搜索引擎,它以其高效、可扩展和实时性著称。这个"最新版linux elasticsearch-7.17.1-linux-x86_64.tar.gz"文件是为Linux平台设计的Elasticsearch 7.17.1版本的二进制发行版,适用于64...

    elasticsearch-head-master

    标题"elasticsearch-head-master"表明我们正在讨论的是Elasticsearch-Head的主分支或者是最新的版本,这意味着它可能包含了最新的特性、修复和性能优化。 描述中提到"可以直接启动,需要配置一下地址。连接es",这...

    最新版windows elasticsearch-7.13.2-windows-x86_64.zip

    Elasticsearch是一款开源的全文搜索引擎,它以其高效、可扩展和易用性闻名于IT界。这个最新的Windows版本,即elasticsearch-7.13.2-windows-x86_64.zip,是专为64位Windows操作系统设计的。Elasticsearch的核心功能...

    最新版linux elasticsearch-8.3.3-linux-x86_64.tar.gz

    Elasticsearch基于Apache Lucene构建,提供了高效的全文索引和搜索功能。它支持多种数据类型,包括文本、数字、日期、地理位置等,这使得它能够处理结构化和非结构化的数据。Elasticsearch的设计理念是分布式的,这...

    elasticsearch-7.7.0-2020-linux-x86_64.tar.gz.zip

    在Elasticsearch中,数据以索引(Index)的形式存储,每个索引可以包含一个或多个类型(Type),在7.x版本后,已不再支持类型概念,所有文档直接属于索引。可以通过HTTP RESTful API来创建、查询、更新和删除数据。...

    elasticSearch(ES)最新版 ik分词插件7.10 elasticsearch-analysis-ik-7.10.0

    Elasticsearch(ES)是一种流行的开源全文搜索引擎,它基于Lucene构建,提供了分布式、RESTful风格的搜索和分析引擎服务。在中文环境下,为了实现精确的分词和搜索,我们需要安装适合版本的分词插件,如“elastic...

    最新版windows elasticsearch-7.12.1-windows-x86_64.zip

    `config`目录则包含了Elasticsearch的主要配置文件,如`elasticsearch.yml`,你可以在此文件中配置节点设置、网络接口、索引设置等。 在运行Elasticsearch之前,建议修改`elasticsearch.yml`中的`cluster.name`,为...

    最新版windows elasticsearch-8.7.0-windows-x86-64.zip

    首先,Elasticsearch的核心特性包括分布式、RESTful风格的接口和自动分词的全文索引。分布式设计使得它可以横向扩展,处理大量数据,并且通过复制和分片机制实现高可用性。RESTful接口则让开发者能够轻松地使用HTTP...

    elasticsearch-7.9.0-linux-x86_64.rar

    Elasticsearch 7.9.0是Elasticsearch的一个稳定版本,它引入了对Java 11的支持,并修复了许多已知问题。这一版本也意味着对旧版Java(如Java 8)的支持逐渐减弱,因此,升级到更高版本的Java运行环境是必要的。 2....

    elasticsearch-head 1.0.8.zip

    **Elasticsearch Head 插件详解** Elasticsearch 是一个高度可扩展的开源全文搜索引擎,设计用于处理海量数据,提供快速、准实时的搜索和分析功能。它基于 Lucene 库构建,但提供了更高级别的分布式、RESTful 风格...

    elasticsearch-8.1.2-windows-x86_64

    2. **倒排索引**:通过倒排索引技术,Elasticsearch能快速进行全文搜索,支持复杂的查询语法和过滤条件。 3. **实时性**:Elasticsearch在索引数据时几乎无延迟,适合实时数据分析和搜索需求。 4. **多租户**:支持...

    最新版 elasticsearch-analysis-ik-7.8.1.zip

    4. **版本 7.8.1**:这个版本意味着插件与 Elasticsearch 的 7.8.1 版本兼容,可能包含了一些针对该版本的优化和修复。升级到新版本可以获取最新的功能和性能改进。 5. **压缩包内容**: - `httpclient-4.5.2.jar`...

    ElasticSearch-Head_v0.1.5.zip

    Elasticsearch-Head插件则为开发者和管理员提供了直观的界面,可以查看索引、节点、文档等信息,执行搜索和管理操作,极大地简化了与Elasticsearch交互的过程。 在压缩包内,我们可以看到以下几个关键文件和目录: ...

Global site tag (gtag.js) - Google Analytics