weixin_42306946 2009-04-20 13:53
浏览 396
已采纳

no segments file found 错误

最近将全文检索的程序从windows平台移植到linux平台中,发现了一个问题:
搜索时总是报如下错误:
[code="java"]
java.io.FileNotFoundException: no segments* file found in org.apache.lucene.store.FSDirectory@/usr/local/holendb: files:
at org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:516)
at org.apache.lucene.index.IndexReader.open(IndexReader.java:221)
at org.apache.lucene.index.IndexReader.open(IndexReader.java:148)
at asop.lucene.SearchByLucene.getHighLightResult(SearchByLucene.java:62)
。。。。。。。
[/code]
但是在/usr/local/holendb的目录下有如下的文件:
-rw-r--r-- 1 root root 34822300 04-20 13:33 _1p3b.cfs
-rw-r--r-- 1 root root 44 04-20 13:33 segments_3e6w
-rw-r--r-- 1 root root 20 04-20 13:33 segments.gen
我将这些文件拷贝到windows平台中的索引目录中运行搜索程序,可以正常使用,查处结果。这是什么问题呢?请教各位大大了
[b]问题补充:[/b]
路径是正确的
[b]问题补充:[/b]
我的建立索引的方法如下:
[code="java"]
public int createDataBase(File file, boolean newOrAppend) {
int returnValue = 0;
if (!file.isDirectory()) {
file.mkdirs();
}
try {
MyPaoding pp = MyPaoding.getInstance();
Analyzer writerAnalyzer = PaodingAnalyzer.writerMode(pp
.getPaoDing());
IndexWriter indexWriter = new IndexWriter(file,
writerAnalyzer, newOrAppend);
indexWriter.close();
returnValue = 1;
} catch (Exception ex) {
ex.printStackTrace();
}
return returnValue;
}

/**
 * 
 * 传入检索库路径,初始化库
 * 
 * @param file
 * 
 * @return
 * 
 */

public int createDataBase(String file) {
    return this.createDataBase(new File(file), true);
}

[/code]
插入数据的方法
[code="java"]
/**
* 创建全文索引
*
* @param dbpath
* 索引文件的位置
* @param map
* 创建索引的索引数据
* @return
*/
@SuppressWarnings("unchecked")
public int insertRecords(String dbpath, HashMap map) {
int returnValue = 0;
try {
MyPaoding pp = MyPaoding.getInstance();
Analyzer writerAnalyzer = PaodingAnalyzer.writerMode(pp
.getPaoDing());
IndexWriter indexWriter = new IndexWriter(dbpath, writerAnalyzer,
false);
//Directory dir = FSDirectory.getDirectory(dbpath,false);//
this.addMap(indexWriter, map);
returnValue = 1;
} catch (Exception ex) {
ex.printStackTrace();
log.error(ex);
}
return returnValue;
}

/**
 * 创建索引
 * 
 * @param indexWriter
 * @param map
 */
@SuppressWarnings("unchecked")
private void addMap(IndexWriter indexWriter, HashMap map) {
    Document doc = new Document();
    try {
        Set entries = map.entrySet();
        if (entries == null)
            throw new Exception("空数据");
        Iterator iterator = entries.iterator();
        while (iterator.hasNext()) {
            Map.Entry entry = (Map.Entry) iterator.next();
            Object value;
            Object key = entry.getKey();
            if(entry.getValue()==null){

                value = extractText("");
            }
            else{
                value = extractText(entry.getValue().toString());}
            if (!key.toString().equals("content")) {
                Field fd = new Field(key.toString(), value.toString(),
                        Field.Store.YES, Field.Index.NO,
                        Field.TermVector.NO);
                doc.add(fd);
            } else {
                Field fd = new Field(key.toString(), value.toString(),
                        Field.Store.YES, Field.Index.TOKENIZED,
                        Field.TermVector.WITH_POSITIONS_OFFSETS);
                doc.add(fd);
            }
        }
        indexWriter.addDocument(doc);
        indexWriter.optimize();
        indexWriter.close();
    } catch (Exception ex) {
        ex.printStackTrace();
        log.error(ex);
    }
}

[/code]
搜索的方法:
[code="java"]
MyPaoding pp = MyPaoding.getInstance();
FSDirectory fsdir = FSDirectory.getDirectory(term.getDbpath());
IndexReader reader = IndexReader.open(fsdir);
QueryParser parser = new QueryParser(term.getQueryFieldName(),
PaodingAnalyzer.writerMode(pp.getPaoDing()));
Query query = parser.parse(term.getQueryString());
Searcher searcher = new IndexSearcher(term.getDbpath());
query = query.rewrite(reader);
Hits hits = searcher.search(query);
[/code]
现在报错的地方是:IndexReader reader = IndexReader.open(fsdir);

  • 写回答

2条回答 默认 最新

  • wanghaolovezlq 2009-04-20 14:36
    关注

    windows平台移植到linux,你的问题有可能是路径问题导致的,你去分析下你的路径,相对路径,绝对路径等

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 使用C#,asp.net读取Excel文件并保存到Oracle数据库
  • ¥15 C# datagridview 单元格显示进度及值
  • ¥15 thinkphp6配合social login单点登录问题
  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配