分布式搜索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目录下
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...OKWrote new segments file "segments_2ch"