if (bestTextFragment != null && bestTextFragment.getScore() > 0) { fragsList.add(bestTextFragment);
/** * Highlights chosen terms in a text, extracting the most relevant sections. The document text is analysed in chunks to record * hit statistics across the document. After accumulating stats, the fragments with the highest scores are returned as an * array of strings in order of score (contiguous fragments are merged into one in their original order to improve * readability) * * @param text * text to highlight terms in * @param maxNumFragments * the maximum number of fragments. * * @return highlighted text fragments (between 0 and maxNumFragments number of fragments) * @throws InvalidTokenOffsetsException * thrown if any token's endOffset exceeds the provided text's length */ public final String[] getBestFragments(TokenStream tokenStream, String text, int maxNumFragments) throws IOException, InvalidTokenOffsetsException { maxNumFragments = Math.max(1, maxNumFragments); // sanity check TextFragment[] frag = getBestTextFragments(tokenStream, text, true, maxNumFragments); // Get text ArrayList<String> fragTexts = new ArrayList<String>(); for (int i = 0; i < frag.length; i++) { if ((frag[i] != null) && (frag[i].getScore() > 0)) { fragTexts.add(frag[i].toString()); } } return fragTexts.toArray(new String[0]); }
@Override public void onRecordAddedToResultSet(OLuceneQueryContext queryContext, OContextualRecordId recordId, Document ret, final ScoreDoc score) { recordId.setContext(new HashMap<String, Object>() {{ HashMap<String, TextFragment[]> frag = queryContext.getFragments(); frag.entrySet().stream().forEach(f -> { TextFragment[] fragments = f.getValue(); StringBuilder hlField = new StringBuilder(); for (int j = 0; j < fragments.length; j++) { if ((fragments[j] != null) && (fragments[j].getScore() > 0)) { hlField.append(fragments[j].toString()); } } put("$" + f.getKey() + "_hl", hlField.toString()); }); put("$score", score.score); }}); }
for (int i = 0; i < frag.length; i++) if ((frag[i] != null) && (frag[i].getScore() > 0))
protected final List<String> getBestFragments( Query query, Formatter formatter, TokenStream tokenStream, String text, int maxNumFragments ) throws IOException { Highlighter highlighter = new Highlighter( formatter, new CleaningEncoder(), new QueryScorer( query ) ); highlighter.setTextFragmenter( new OneLineFragmenter() ); tokenStream.reset(); maxNumFragments = Math.max( 1, maxNumFragments ); // sanity check TextFragment[] frag = highlighter.getBestTextFragments( tokenStream, text, false, maxNumFragments ); // Get text ArrayList<String> fragTexts = new ArrayList<String>( maxNumFragments ); for ( int i = 0; i < frag.length; i++ ) { if ( ( frag[i] != null ) && ( frag[i].getScore() > 0 ) ) { fragTexts.add( frag[i].toString() ); } } return fragTexts; }
protected final List<String> getBestFragments( Query query, Formatter formatter, TokenStream tokenStream, String text, int maxNumFragments ) throws IOException { Highlighter highlighter = new Highlighter( formatter, new CleaningEncoder(), new QueryScorer( query ) ); highlighter.setTextFragmenter( new OneLineFragmenter() ); maxNumFragments = Math.max( 1, maxNumFragments ); // sanity check TextFragment[] frag; // Get text ArrayList<String> fragTexts = new ArrayList<>( maxNumFragments ); try { frag = highlighter.getBestTextFragments( tokenStream, text, false, maxNumFragments ); for ( int i = 0; i < frag.length; i++ ) { if ( ( frag[i] != null ) && ( frag[i].getScore() > 0 ) ) { fragTexts.add( frag[i].toString() ); } } } catch ( InvalidTokenOffsetsException e ) { // empty? } return fragTexts; }
protected final List<String> getBestFragments( Query query, Formatter formatter, TokenStream tokenStream, String text, int maxNumFragments ) throws IOException { Highlighter highlighter = new Highlighter( formatter, new CleaningEncoder(), new QueryScorer( query ) ); highlighter.setTextFragmenter( new OneLineFragmenter() ); maxNumFragments = Math.max( 1, maxNumFragments ); // sanity check TextFragment[] frag; // Get text ArrayList<String> fragTexts = new ArrayList<String>( maxNumFragments ); try { frag = highlighter.getBestTextFragments( tokenStream, text, false, maxNumFragments ); for ( int i = 0; i < frag.length; i++ ) { if ( ( frag[i] != null ) && ( frag[i].getScore() > 0 ) ) { fragTexts.add( frag[i].toString() ); } } } catch ( InvalidTokenOffsetsException e ) { // empty? } return fragTexts; }
protected final List<String> getBestFragments( Query query, Formatter formatter, TokenStream tokenStream, String text, int maxNumFragments ) throws IOException { Highlighter highlighter = new Highlighter( formatter, new CleaningEncoder(), new QueryScorer( query ) ); highlighter.setTextFragmenter( new OneLineFragmenter() ); maxNumFragments = Math.max( 1, maxNumFragments ); // sanity check TextFragment[] frag; // Get text ArrayList<String> fragTexts = new ArrayList<>( maxNumFragments ); try { frag = highlighter.getBestTextFragments( tokenStream, text, false, maxNumFragments ); for ( int i = 0; i < frag.length; i++ ) { if ( ( frag[i] != null ) && ( frag[i].getScore() > 0 ) ) { fragTexts.add( frag[i].toString() ); } } } catch ( InvalidTokenOffsetsException e ) { // empty? } return fragTexts; }
TextFragment[] bestTextFragments = highlighter.getBestTextFragments(tstream, docTexts[j], mergeContiguousFragments, numFragments); for (int k = 0; k < bestTextFragments.length; k++) { if ((bestTextFragments[k] != null) && (bestTextFragments[k].getScore() > 0)) { frags.add(bestTextFragments[k]); ArrayList<String> fragTexts = new ArrayList<String>(); for (TextFragment fragment: frags) { if ((fragment != null) && (fragment.getScore() > 0)) { fragTexts.add(fragment.toString());
private void handleHighlight(List<LumongoHighlighter> highlighterList, ScoredResult.Builder srBuilder, org.bson.Document doc) { for (LumongoHighlighter highlighter : highlighterList) { HighlightRequest highlightRequest = highlighter.getHighlight(); String indexField = highlightRequest.getField(); String storedFieldName = indexConfig.getStoredFieldName(indexField); if (storedFieldName != null) { HighlightResult.Builder highLightResult = HighlightResult.newBuilder(); highLightResult.setField(storedFieldName); Object storeFieldValues = ResultHelper.getValueFromMongoDocument(doc, storedFieldName); LumongoUtil.handleLists(storeFieldValues, (value) -> { String content = value.toString(); TokenStream tokenStream = perFieldAnalyzer.tokenStream(indexField, content); try { TextFragment[] bestTextFragments = highlighter .getBestTextFragments(tokenStream, content, false, highlightRequest.getNumberOfFragments()); for (TextFragment bestTextFragment : bestTextFragments) { if (bestTextFragment != null && bestTextFragment.getScore() > 0) { highLightResult.addFragments(bestTextFragment.toString()); } } } catch (Exception e) { throw new RuntimeException(e); } }); srBuilder.addHighlightResult(highLightResult); } } }