2009-08-03 5 views
1

Je pars d'un index Lucene que quelqu'un d'autre a créé. J'aimerais trouver tous les mots qui suivent un mot donné. J'ai extrait le terme (org.apache.lucene.index.Term) d'intérêt de l'indice, et je peux trouver les documents qui contiennent ce terme:Comment obtenir le prochain terme d'un indice Lucene?

segmentTermDocs = segmentReader.termDocs(term); 
while (segmentTermDocs.next) { 
     doc = segmentReader.document(segmentTermDocs.doc); 
... 
} 

est-il un moyen pour moi de localiser les positions du terme dans le document et extraire les termes qui le suivent?

Répondre

1

Puisque l'indexation des n-grammes n'est pas une option dans votre situation, une force brutale sera nécessaire. Vous pourriez énumérer le IndexReader's terms and termPositions, mais ce serait probablement excrutiatingly lent.

Une approche plus rapide serait d'implémenter un algorithme de recherche de division et de conquête en énumérant les termes et en utilisant un MultiPhraseQuery pour vérifier un groupe à la fois. Divisez tous les termes potentiels en groupes de taille raisonnable (disons 1000) et lancez une recherche MultiPhraseQuery avec chaque segment et votre mot de préfixe. S'il y a des hits, appelez récursivement les sous-groupes jusqu'à ce que vous atteigniez un seul terme.

+0

Merci pour les idées! C'est pour générer un rapport, donc la performance n'est pas vraiment un problème. J'ai fini par faire une recherche en force brute, en créant PhraseQuerys composé du terme d'intérêt et de tous les autres termes de l'index. Ces requêtes qui ont eu des résultats ont indiqué les termes qui ont suivi le terme d'intérêt. –

Questions connexes