我正在使用Lucene Library,我在执行BooleanQuery后找到了所需的文档。 我在搜索器中循环,每次我都想把文档放在HashMap中。
int docId = hits[i].doc;
Document doc = searcher.doc(docId);
HashMap X = new HashMap ();
现在我想知道如何使用name_Field和文档的value_Field填充hashmap X?
答案 0 :(得分:0)
您可以迭代文档字段,如下所示:
for (IndexableField field : doc.getFields())
{
X.put(field.name(), field.stringValue());
}
但它只适用于存储在索引中的字段(使用Field.Store.YES标志添加的字段)。此外,如果文档中的字段有多个值,则必须修改此代码。
答案 1 :(得分:0)
您可以扩展lucene收集器,然后按照您想要的方式添加文档。
IndexSearcher searcher = new IndexSearcher(indexReader);
private Map<String, String> docs = new HashMap<String, String>();
searcher.search(query, new Collector() {
private int docBase;
// ignore scorer
public void setScorer(Scorer scorer) {
}
// accept docs out of order (for a BitSet it doesn't matter)
public boolean acceptsDocsOutOfOrder() {
return true;
}
public void collect(int docNum) {
Document luceneDoc = searcher.doc(doc + docBase);
docs.put(luceneDoc.getValues(name_Field), luceneDoc.getValues(value_Field));
}
public void setNextReader(AtomicReaderContext context) {
this.docBase = context.docBase;
}
});