Trouver la position des résultats de recherche à partir de Lucene
Avec Lucene, quelle serait l'approche recommandée pour la localisation des matchs dans les résultats de recherche?
Plus précisément, supposons que l'indice de documents ont un champ "texte intégral", qui enregistre la plaine-le contenu du texte d'un document. En outre, supposons que pour un de ces documents, le contenu est "The quick brown fox jumps over the lazy dog". Suivant une recherche est effectuée pour "fox chien". Évidemment, le document serait un succès.
Dans ce scénario, peut Lucene être utilisé pour fournir quelque chose comme la mise en correspondance des régions pour les documents trouvés? Donc, pour ce scénario, je voudrais produire quelque chose comme:
[{match: "fox", startIndex: 10, length: 3},
{match: "dog", startIndex: 34, length: 3}]
Je soupçonne qu'il pourrait être mis en œuvre par ce qui est fourni dans le org.apache.lucene.de recherche.un ensemble de moments forts. Je ne suis pas sûr au sujet de l'approche globale...
OriginalL'auteur VoidPointer | 2009-08-21
Vous devez vous connecter pour publier un commentaire.
TermFreqVector est ce que j'ai utilisé. Ici, c'est un travail de démonstration, qui imprime à la fois le terme de positions, et le début et la fin à terme d'indices:
OriginalL'auteur Allasso
Voici une solution pour lucene 5.2.1. Il ne fonctionne que pour un seul mot des requêtes sur, mais doit démontrer les principes de base.
L'idée de base est:
TokenStream
pour chaque document, ce qui correspond à votre requête.QueryScorer
et de l'initialiser avec la récupéréestokenStream
.tokenStream.incrementToken()
) et vérifier si le jeton correspond aux critères de recherche (fait parqueryScorer.getTokenScore()
).Voici le code:
OriginalL'auteur matthiasboesinger