Java 如何将检索到的文档放入Hashmap

Java 如何将检索到的文档放入Hashmap,java,lucene,Java,Lucene,我正在处理Lucene库,在执行BooleanQuery后找到了所需的文档。 我在搜索器中循环,每次我都想把文档放到HashMap中 int docId = hits[i].doc; Document doc = searcher.doc(docId); HashMap X = new HashMap (); 现在我想知道如何用文档的name_字段和value_字段填充hashmap X?您可以像这样迭代文档字段: for (IndexableField field : doc.getFiel

我正在处理Lucene库,在执行BooleanQuery后找到了所需的文档。 我在搜索器中循环,每次我都想把文档放到HashMap中

int docId = hits[i].doc;
Document doc = searcher.doc(docId);
HashMap X = new HashMap ();

现在我想知道如何用文档的name_字段和value_字段填充hashmap X?

您可以像这样迭代文档字段:

for (IndexableField field : doc.getFields())
{
    X.put(field.name(), field.stringValue());
}

但它仅适用于存储在索引中的字段(使用Field.Store.YES标志添加的字段)。此外,如果文档中的字段有多个值,则必须修改此代码。

您可以扩展lucene Collector,然后按需要添加文档

 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;
 }
});
IndexSearcher searcher=新的IndexSearcher(indexReader);
私有映射文档=新HashMap();
search.search(查询,新收集器(){
私人文件库;
//忽略得分手
公共无效记分器(记分器记分器){
}
//接受无序的文档(对于位集,这无关紧要)
公共布尔值AcceptsDocSoutoOrder(){
返回true;
}
公共作废收集(int docNum){
Document luceneDoc=searcher.doc(doc+docBase);
put(luceneDoc.getValues(name_字段),luceneDoc.getValues(value_字段));
}
public void setnextrader(AtomicReaderContext上下文){
this.docBase=context.docBase;
}
});