Passage passage = passages[j]; StringBuilder sb = new StringBuilder(); pos = passage.getStartOffset(); for (int i = 0; i < passage.getNumMatches(); i++) { int start = passage.getMatchStarts()[i]; int end = passage.getMatchEnds()[i]; append(sb, content, pos, Math.max(pos, passage.getEndOffset())); snippets[j] = new Snippet(sb.toString().trim(), passage.getScore(), passage.getNumMatches() > 0);
@Override public String format(Passage passages[], String content) { StringBuilder sb = new StringBuilder(); int pos = 0; for (Passage passage : passages) { for (int i = 0; i < passage.getNumMatches(); i++) { int start = passage.getMatchStarts()[i]; int end = passage.getMatchEnds()[i]; sb.append(content.substring(pos, start)); sb.append("<span class=\"highlight\">"); sb.append(content.substring(start, end)); sb.append("</span>"); pos = end; } } if (pos < content.length()) { sb.append(content.substring(pos)); } return sb.toString(); } });
Passage current = new Passage(); current.reset(); // can't compete, just reset it } else { passageQueue.offer(current); if (passageQueue.size() > n) { current = passageQueue.poll(); current.reset(); } else { current = new Passage(); passageQueue.toArray(passages); for (Passage p : passages) { p.sort(); assert term != null; current.addMatch(start, end, term); if (off.pos == dp.freq()) { break; // removed from pq
/** Called to summarize a document when no hits were * found. By default this just returns the first * {@code maxPassages} sentences; subclasses can override * to customize. */ protected Passage[] getEmptyHighlight(String fieldName, BreakIterator bi, int maxPassages) { // BreakIterator should be un-next'd: List<Passage> passages = new ArrayList<>(); int pos = bi.current(); assert pos == 0; while (passages.size() < maxPassages) { int next = bi.next(); if (next == BreakIterator.DONE) { break; } Passage passage = new Passage(); passage.score = Float.NaN; passage.startOffset = pos; passage.endOffset = next; passages.add(passage); pos = next; } return passages.toArray(new Passage[passages.size()]); }