J'utilise Lucene Highlighter 2.4.1 pour mon application. J'utilise le surligneur pour obtenir les meilleurs fragments correspondants et les afficher. Je fais un appel à une fonction String [] getFragmentsWithHighlightedTerms (Analyseur d'analyseur, Requête de requête, Chaîne nom de champ, Chaîne de champs de contenu, nombre de fragments int, fragmentSize). Par exemple:Problèmes d'utilisation de Lucene Highlighter
String text = doc.get("MetaData");
getFragmentsWithHighlightedTerms(analyzer, query, "MetaData", Text, 5, 100);
La fonction getFragmentsWithHighlightedTerms() est définie comme suit
private static String[] getFragmentsWithHighlightedTerms(argument list here)
{
TokenStream stream = TokenSources.getTokenStream(fieldName, fieldContents, analyzer);
SpanScorer scorer = new SpanScorer(query, fieldName, new CachingTokenFilter(stream));
Fragmenter fragmenter = new SimpleSpanFragmenter(scorer, fragmentSize);
Highlighter highlighter = new Highlighter(scorer);
highlighter.setTextFragmenter(fragmenter);
highlighter.setMaxDocCharsToAnalyze(Integer.MAX_VALUE);
String[] fragments = highlighter.getBestFragments(stream, fieldContents, fragmentNumber);
return fragments;
}
Maintenant, mon problème est que la méthode highlighter.getBestFragments() est en double retour. c'est-à-dire, si je montre dire les 5 premiers fragments, non. 1 et 3 sont les mêmes. Je ne comprends pas très bien ce qui cause cela. Y a-t-il un problème avec le code?
Le fragment dupliqué se produit-il réellement plusieurs fois dans le contenu du champ? Pouvez-vous poster l'exemple de requête et de contenu? – KenE
Salut, merci pour votre réponse. J'ai trouvé le bogue, qui était dans la création d'index qui causait des hits en double. –