Luence建索中的一个异常
异常:org.apache.lucene.index.CorruptIndexException: failed to locate current segments_N file
at org.apache.lucene.index.IndexFileDeleter.<init>(IndexFileDeleter.java:223)
at org.apache.lucene.index.IndexWriter.<init>(IndexWriter.java:670)
at org.apache.lucene.demo.IKAnalyzerDemo.createIndex(IKAnalyzerDemo.java:45)
at org.apache.lucene.demo.IKAnalyzerDemo.main(IKAnalyzerDemo.java:185)
未能找到当前segments_N文件
建索类:
String fieldName = "title";
String fieldValue="content";
Analyzer analyzer = new IKAnalyzer();
/**
* 创建索引
* @param pathFile 索引存放位置
*/
@SuppressWarnings("deprecation")
public void createIndex(String pathFile){
String text1 = "上海(Shanghai),简称“沪”或“申”,中国第一大城市,中华人民共和国直";
String text2 = "天津,简称津,中华人民共和国直辖市、中国国家中心城市、中国北方经济中心、.";
String text3 = "北京是中华人民共和国的首都、直辖市和国家中心城市之一,";
try {
//文件生成在classpath下
//RAMDirectory directory = new RAMDirectory();
Directory directory = FSDirectory.open(new File(pathFile));
//索引存放文件夹 通过测试该文件夹可以持续放入索引 每建索一次 就会生成对应的文件
//Directory directory=FSDirectory.open(new File(pathFile));
IndexWriterConfig writerConfig = new IndexWriterConfig(Version.LUCENE_34, analyzer);
IndexWriter indexWriter = new IndexWriter(directory, writerConfig);
/**
* Field.Store.YES 表示是否存储 Field.Index.ANALYZED 表示对该对象是否建索
* 一般存储需要展示的内容,对有用的如:标题、内容进行建索,链接或者序号不用建索。
*/
Document document1 = new Document();
document1.add(new Field(fieldName, "中国上海", Field.Store.YES, Field.Index.ANALYZED));
document1.add(new Field(fieldValue, text1, Field.Store.YES, Field.Index.ANALYZED));
indexWriter.addDocument(document1);
Document document2 = new Document();
document2.add(new Field(fieldName, "中国天津", Field.Store.YES, Field.Index.ANALYZED));
document2.add(new Field(fieldValue, text2, Field.Store.YES, Field.Index.ANALYZED));
indexWriter.addDocument(document2);
Document document3 = new Document();
document3.add(new Field(fieldName, "北京", Field.Store.YES, Field.Index.ANALYZED));
document3.add(new Field(fieldValue, text3, Field.Store.YES, Field.Index.ANALYZED));
indexWriter.addDocument(document3);
//此时删除的文档并未完全删除,而是存储在回收站中,可以恢复的
//indexWriter.forceMergeDeletes();
//indexWriter.ramSizeInBytes();
indexWriter.close();
} catch (Exception e) {
e.printStackTrace();
}
}
解决方法:修改pathFile文件夹路径 。
谷歌了一下,好像是上次建索失败导致。具体原因不知道,希望知道原因的大手给解释一下!虾米不胜感激!