2011-01-31 1 views
1

disons que j'ai les champs stud_roll_number et date_leave.Groupe de champs Lucene

sélectionnez stud_roll_number, comptez (*) à partir de some_table où date_leave> groupe some_date par stud_roll_number;

comment écrire la même requête en utilisant Lucene .... J'ai essayé après avoir interrogé date_leave> some_date

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

}

Mais, j'ai un énorme ensemble de données, cela prend beaucoup de temps pour le calculer. Y a-t-il un autre moyen de le trouver? Merci d'avance ...

Répondre

0

Votre goulot d'étranglement des performances est presque certainement l'E/S qu'il faut pour effectuer les recherches de valeurs de document et de champ. Ce que vous voulez faire dans cette situation est d'utiliser un FieldCache pour le champ que vous voulez regrouper. Une fois que vous avez un cache de champ, vous pouvez rechercher les valeurs par Lucene doc ID, ce qui sera rapide car toutes les valeurs sont en mémoire.

N'oubliez pas de donner à votre HashMap une capacité initiale pour éviter le redimensionnement des tableaux.

+0

Existe-t-il un exemple utilisant FieldCache ??? J'ai cherché, mais désolé, je ne pouvais pas le trouver ... – Nageswaran

Questions connexes