¿Cómo contar la frecuencia de término para un conjunto de documentos?

Tengo un índice Lucene con los siguientes documentos:

doc1 := { caldari, jita, shield, planet }
doc2 := { gallente, dodixie, armor, planet }
doc3 := { amarr, laser, armor, planet }
doc4 := { minmatar, rens, space }
doc5 := { jove, space, secret, planet }

entonces estos 5 documentos usan 14 términos diferentes:

[ caldari, jita, shield, planet, gallente, dodixie, armor, amarr, laser, minmatar, rens, jove, space, secret ]

La frecuencia de cada término:

[ 1, 1, 1, 4, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1 ]

para facilitar la lectura:

[ caldari:1, jita:1, shield:1, planet:4, gallente:1, dodixie:1, 
armor:2, amarr:1, laser:1, minmatar:1, rens:1, jove:1, space:2, secret:1 ]

Lo que sí quiero saber ahora es cómo obtener el término vector de frecuencia para un conjunto de documentos.

por ejemplo:

Set<Documents> docs := [ doc2, doc3 ]

termFrequencies = magicFunction(docs); 

System.out.pring( termFrequencies );

daría como resultado la salida:

[ caldari:0, jita:0, shield:0, planet:2, gallente:1, dodixie:1, 
armor:2, amarr:1, laser:1, minmatar:0, rens:0, jove:0, space:0, secret:0 ]

eliminar todos los ceros:

[ planet:2, gallente:1, dodixie:1, armor:2, amarr:1, laser:1 ]

Tenga en cuenta que el vetor de resultados contiene solo las frecuencias de término del conjunto de documentos. ¡NO las frecuencias generales de todo el índice! El término 'planeta' está presente 4 veces en todo el índice, pero el conjunto de documentos fuente solo lo contiene 2 veces.

Una implementación ingenua sería simplemente iterar sobre todos los documentos en eldocs establecer, crear un mapa y contar cada término. Pero necesito una solución que también funcione con un tamaño de conjunto de documentos de 100,000 o 500,000.

¿Hay alguna característica en Lucene que pueda usar para obtener este término vector? Si no existe tal característica, ¿cómo se vería una estructura de datos que alguien puede crear en el momento del índice para obtener dicho término de manera fácil y rápida?

No soy ese experto en Lucene, así que lamento si la solución es obvia o trivial.

Tal vez valga la pena mencionar: la solución debería funcionar lo suficientemente rápido para una aplicación web, aplicada a consultas de búsqueda de clientes.

Respuestas a la pregunta(2)

Su respuesta a la pregunta