我是Java和Lucene的新手。我的代码从文件中获取一行,并将其存储在Lucene Index中。但是当我创建一个IndexReader来搜索和读取索引时,它抛出了一个异常。
我的java代码如下。在创建IndexReader时,它抛出一个IndexNotFoundException
static String itemsfreq[];
static StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_35);
static IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_35, analyzer);
public static void index_data(Directory indexed_document,int doc_num,IndexWriter w) throws IOException
{
for(int i = 0;i < itemsfreq.length;i++)
{
Document doc = new Document();
doc.add(new Field(Integer.toString(doc_num)+","+itemsfreq[i],itemsfreq[i++], Field.Store.YES, Field.Index.ANALYZED));
w.addDocument(doc);
}
}
//Gets string from a file and insert it in INDEX named indexed_document
public static void main(String[] args) throws IOException
{
BufferedReader reader = new BufferedReader(new FileReader("fullText100.txt"));
String line;
int i = 0;
Directory indexed_document = new RAMDirectory();
IndexWriter writer = new IndexWriter(indexed_document, config);
while((line=reader.readLine()) != null)
{
if(i == 1)
{
break;
}
itemsfreq = line.split(" ");
index_data(indexed_document,i,writer);
i++;
}
IndexReader r = IndexReader.open(indexed_document);
} 发布于 2013-04-25 19:47:49
使用读取器打开索引之前,请调用一次writer.commit()
发布于 2012-05-05 18:16:25
为了将更改写入索引,您必须关闭索引编写器,然后打开IndexReader。
writer.close();如果您必须在写入完成之前打开IndexReader,则必须告诉IndexReader重新打开索引才能看到更改。
发布于 2014-05-10 06:01:24
您需要做的就是在打开IndexSearcher之前显式地调用commit。
directory = new RAMDirectory();
iwriter = new IndexWriter(directory, config);
iwriter.commit();现在打开搜索器
ireader = DirectoryReader.open(directory);
isearcher = new IndexSearcher(ireader);还要记住,在添加文档后需要调用commit,否则搜索可能找不到它。提交后需要重新打开搜索器(当然要关闭旧的搜索器)。
iwriter.commit();https://stackoverflow.com/questions/10460737
复制相似问题