2011-01-31 64 views
1

说我有字段stud_roll_number和date_leave。Lucene字段分组

select stud_roll_number,count(*)from some_table where date_leave> some_date group by stud_roll_number; {

Document doc = search.doc(scoreDoc.doc); 

String value = doc.get(fieldName); 

Integer key = mapGrouper.get(value); 

if (key == null) { 
    key = 1; 
} else { 
    key = key+1; 
} 

mapGrouper.put(value, key); 

}

如何编写使用Lucene相同的查询....我查询date_leave> some_date

为(topDocs.scoreDocs ScoreDoc scoreDoc)后试图但是,我拥有庞大的数据集,需要很多时间来计算。有没有其他方法可以找到它?在此先感谢...

回答

0

您的性能瓶颈几乎可以肯定是执行文档和字段值查找所需的I/O。在这种情况下你想要做的是使用FieldCache作为你想要分组的字段。一旦你有一个字段缓存,你可以通过Lucene doc ID查找值,这将是快速的,因为所有的值都在内存中。

还记得给你的HashMap初始容量以避免数组大小调整。

+0

是否有任何使用FieldCache的例子?我搜索了,但对不起,我无法找到它... – Nageswaran 2011-02-01 06:36:29