現在、RamDirectory の Lucene インデックス (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 に置き換えても、どちらも役に立ちませんでした。クエリは結果を返しません。
誰かが私のエラーを見つけるのを手伝ってくれることを願っています. ありがとう