Lucene Field Grouping

时间:2011-01-31 13:38:28

标签: lucene

说我有字段stud_roll_number和date_leave。

从some_table中选择stud_roll_number,count(*),其中date_leave> some_date group by stud_roll_number;

如何使用Lucene编写相同的查询....我在查询date_leave>后尝试过some_date

for(ScoreDoc scoreDoc:topDocs.scoreDocs){

    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);

}

但是,我拥有庞大的数据集,需要花费很多时间来计算它。有没有其他方法可以找到它????提前谢谢......

2 个答案:

答案 0 :(得分:0)

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

还要记住为HashMap提供初始容量以避免数组大小调整。

答案 1 :(得分:0)

https://issues.apache.org/jira/browse/LUCENE-1421作为补丁,有一个非常新的分组模块可以执行此操作。