Poiché Solr calcola gli sfaccettature delle strutture di dati in memoria, è probabile che il calcolo degli sfaccettature sia associato alla CPU. Il codice per calcolare gli aspetti è già altamente ottimizzato (il metodo getCounts
in UnInvertedField per un campo multivalore).
Un'idea sarebbe quella di parallelizzare il calcolo. Forse il modo più semplice per farlo sarebbe dividere la tua collezione in diversi frammenti come descritto in Do multiple Solr shards on a single machine improve performance?.
In caso contrario, se il termine del dizionario è sufficientemente piccolo e se le query possono richiedere un numero limitato di moduli, è possibile impostare un sistema diverso che mantenga la matrice dei conteggi per ogni coppia (termine, query). Ad esempio, se si accettano solo query a termine, ciò significa che si dovrebbero mantenere i conteggi per ogni coppia di termini. Fai attenzione che ciò richiederebbe molto spazio su disco a seconda del numero totale di termini e query. Se non si richiede che i conteggi siano esatti, forse il più semplice sarebbe calcolare questi conteggi in un processo batch. Altrimenti, potrebbe essere (possibile, ma) un po 'complicato mantenere i conteggi sincronizzati con Solr.
Stai impostando 'facet.limit'? Ho notato che tali query possono richiedere molto tempo anche con più di 100.000 record se 'facet.limit' non è impostato (nel tuo caso, a qualunque cosa' n' potrebbe essere). –