Dado que Solr calcula las facetas de las estructuras de datos en memoria, es probable que el cálculo de facetas esté vinculado a la CPU. El código para calcular facetas ya está altamente optimizado (el método getCounts
en UnInvertedField para un campo multivaluado).
Una idea sería paralelizar el cálculo. Tal vez la forma más fácil de hacer esto sea dividir su colección en varios fragmentos como se describe en Do multiple Solr shards on a single machine improve performance?.
De lo contrario, si su diccionario de términos es lo suficientemente pequeño y las consultas pueden tomar un número limitado de formularios, puede configurar un sistema diferente que mantenga la matriz de conteos para cada par (término, consulta). Por ejemplo, si solo permite consultas de términos, esto significa que debe mantener los recuentos para cada par de términos. Tenga en cuenta que esto requeriría mucho espacio en disco dependiendo de la cantidad total de términos y consultas. Si no requiere que los recuentos sean exactos, tal vez lo más fácil sea calcular estos recuentos en un proceso por lotes. De lo contrario, podría ser (posible, pero) un poco complicado mantener los conteos sincronizados con Solr.
¿Está configurando 'facet.limit'? Me he dado cuenta de que estas consultas pueden llevar mucho tiempo incluso con más de 100.000 registros si 'facet.limit' no está configurado (en su caso, lo que' n' podría ser). –