Obtenir les fréquences des termes dans Lucene
Est-il un moyen rapide et facile d'obtenir les fréquences des termes de l'index Lucene, sans le faire par le biais de la TermVectorFrequencies
classe, car celle-ci prend beaucoup de temps pour les grandes collections?
Ce que je veux dire, est-il quelque chose comme TermEnum
qui n'a pas seulement le document de fréquence, mais la fréquence des termes ainsi?
Mise à JOUR:
À l'aide de TermDocs est trop lent.
Vous devez vous connecter pour publier un commentaire.
Utilisation
TermDocs
pour obtenir l'expression de la fréquence pour un document donné. Comme le document de fréquence, vous obtenez le terme de documents à partir d'uneIndexReader
, en utilisant le terme d'intérêt.Vous ne trouverez pas une méthode plus rapide que
TermDocs
sans perdre quelque chose d'universel.TermDocs
lit directement à partir de l' ".frq" fichier dans un segment d'index, où chaque terme de fréquence est inscrite dans l'ordre du document.Si c'est "trop lent", assurez-vous que vous avez optimisé votre indice de fusionner plusieurs segments en un seul segment. Itérer sur les documents dans l'ordre (sauts sont très bien, mais vous ne pouvez pas sauter d'avant en arrière dans la liste des documents de manière efficace).
Votre prochaine étape pourrait être un traitement supplémentaire pour créer encore plus de fichiers spécialisés structure qui laisse les
SkipData
. Personnellement, je regarde pour un meilleur algorithme pour atteindre mon objectif, ou de fournir un meilleur matériel—beaucoup de mémoire, soit pour tenir unRAMDirectory
, ou à donner à l'OS pour une utilisation sur son propre fichier-système de mise en cache.Le coffre de la version de Lucene (à 4.0, finalement) maintenant, expose le totalTermFreq() pour chaque terme de la TermsEnum. C'est le nombre total de fois que ce terme est apparu dans l'ensemble du contenu (mais, comme docFreq, ne prend pas en compte les suppressions).
TermDocs donne la TF d'un terme donné dans chaque document qui contient le terme. Vous pouvez obtenir le DF en parcourant chaque <document, fréquence> de la paire et le comptage du nombre de paires, bien que TermEnums devrait être plus rapide. IndexReader a un termDocs(Terme) méthode qui renvoie un TermDocs pour le Terme donné et l'index.