我目前正在尝试从 RamDirectory 中的 Lucene Index (v. 4) 获取所有文档。
在创建索引时,使用以下 addDocument 函数:
public void addDocument(int id, String[] values, String[] fields) throws IOException{
Document doc = new Document();
doc.add(new IntField("getAll", 1, IntField.TYPE_STORED));
doc.add(new IntField("ID", id, IntField.TYPE_STORED));
for(int i = 0; i < fields.length; i++){
doc.add(new TextField(fields[i], values[i], Field.Store.NO));
}
writer.addDocument(doc);
}
在为所有文档调用此方法后,作者已关闭。正如您从添加到文档的第一个字段中看到的那样,我添加了一个附加字段“getAll”以方便检索所有文档。如果我理解正确,查询“getAll:1”应该返回索引中的所有文档。但事实并非如此。我为此使用以下功能:
public List<Integer> getDocIds(int noOfDocs) throws IOException, ParseException{
List<Integer> result = new ArrayList<Integer>(noOfDocs);
Query query = parser.parse("getAll:1");
ScoreDoc[] docs = searcher.search(query, noOfDocs).scoreDocs;
for(ScoreDoc doc : docs){
result.add(doc.doc);
}
return result;
}
noOfDocs 是被索引的文档数。当然,我在创建 IndexSearcher 时使用了相同的 RamDirectory。将已解析的查询替换为手动创建的 TermQuery 也无济于事。查询不返回任何结果。
希望有人可以帮助找到我的错误。谢谢