关于Lucene的一些问题,请高人帮忙,分不够再给!!!

javalion 2003-08-19 03:11:02
相关代码我在后面给出了,请教三个问题:

第一:判断一个文件的索引是否已经建立;
lucene包已经提供了一个IndexReader.indexExists(File file)的方法,但是我用过多次后发现返回的boolean类型总是false,打印出来看也都存在!我想可能使用方法错了,那怎么才能正确的使用这个方法!
第二:查找一个文件的索引位置;
为了要删除一个索引,必须使用IndexReader.delete(int i)的方法,参数i为索引的位置,我如何才能找到这个索引的位置而删除这个索引,我自己写了一个for循环,但是如果文件多的话效率肯定有问题!
第三:是否提供了修改索引的方法;
要修改索引的话是否有方法可以调用,如果没有的话,我可以根据第二个解决方案删除旧索引,然后再追加一个索引.
谢谢各位高手来解决,分不够再开版给分,绝不食言!!!

import java.io.*;
import java.util.Date;

import org.apache.lucene.index.*;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.analysis.cn.ChineseAnalyzer;
import org.apache.lucene.document.*;

public class NewIndex {
public static void main(String args[]) throws Exception {

//IndexWriter indexWriter = new IndexWriter("index", new ChineseAnalyzer(), false);
File file = new File("D:\\lucene\\text\\aa.txt");
IndexReader indexReader = IndexReader.open("index");
try {
Date start = new Date();
//if the file has exists then replace, can't add new index files
Document doc;

for (int i=0; i<indexReader.numDocs(); i++) {
doc = indexReader.document(i);
System.out.println(doc.get("path"));
System.out.println(indexReader.indexExists(new File(doc.get("path"))));
//这里返回的总是false
}
System.out.println(indexReader.numDocs());
System.out.println(indexReader.indexExists(file));
System.out.println(indexReader.lastModified(file));
}
catch (Exception e) {

}
finally {
//indexWriter.close();
indexReader.close();
}
}
}
...全文
161 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
javalion 2003-08-20
  • 打赏
  • 举报
回复
IndexReader.indexExists(File file)的方法是判断索引文件/目录是否存在的方法,开始搞错了,明白了,多谢walkfish的帮助,现在可以删除索引了,但是还是存在一个问题就是如何判断我要加入的一个索引是否已经存在在这个索引目录中.我试了很多方法都不行啊.
javalion 2003-08-19
  • 打赏
  • 举报
回复
谢谢conning333(chen),我很感动,继续up,怎么就是没人解决呢!!!
conning333 2003-08-19
  • 打赏
  • 举报
回复
帮你upup吧。lucene倒是看过,不过没实际使用。
javalion 2003-08-19
  • 打赏
  • 举报
回复
lucene没有人用了吗?再up
javalion 2003-08-19
  • 打赏
  • 举报
回复
大家还没上班吗,自己up,等待......
walkfish 2003-08-19
  • 打赏
  • 举报
回复

"path"好像必须是KeyWord
document.add(Field.Keyword("path", strPath));
javalion 2003-08-19
  • 打赏
  • 举报
回复
根据例子里面的IndexReaer.delete(Term term)方法,建立Term的方法是Term(String name, String value)可以定位一个文件索引的位置,从而删除这个索引,但是我试过后,发现不能删除,索引依旧存在,真是急死我了

import org.apache.lucene.analysis.cn.ChineseAnalyzer;
import org.apache.lucene.index.*;

import java.io.File;

public class DeleteIndex {
public static void main(String args[]) throws Exception {
//delete a index file
IndexReader indexReader = IndexReader.open("index");
File file = new File("D:\\lucene\\text\\aa.txt");
String path = file.getPath().toString();
System.out.println(path);
if (file.exists()) {
Term term = new Term("path", path);
int deleted = indexReader.delete(term);
System.out.println(deleted);//返回的总是0,可见是失败的标志
} else {
System.out.println("File is not exists!");
}
indexReader.close();
}
}

81,090

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧