2010-06-08 10 views
1

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?

+0

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

+1

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. –

Répondre

-1

Je n'ai pas le code en face de moi, mais je pense que vous obtenez un tableau de tableaux. Donc, vous devez faire ceci:

item[] = fragments[0] 
fragment = item[0] 

ou tout simplement obtenir 1 article sur le tableau de fragments.