List of usage examples for org.apache.lucene.index FieldInfos hasOffsets
boolean hasOffsets
To view the source code for org.apache.lucene.index FieldInfos hasOffsets.
Click Source Link
From source file:org.apache.jackrabbit.oak.plugins.index.lucene.LucenePropertyIndex.java
License:Apache License
private String getExcerpt(Query query, Analyzer analyzer, IndexSearcher searcher, ScoreDoc doc, FieldInfos fieldInfos) throws IOException { StringBuilder excerpt = new StringBuilder(); int docID = doc.doc; List<String> names = new LinkedList<String>(); for (IndexableField field : searcher.getIndexReader().document(docID).getFields()) { String name = field.name(); // postings highlighter can be used on analyzed fields with docs, freqs, positions and offsets stored. if (name.startsWith(ANALYZED_FIELD_PREFIX) && fieldInfos.hasProx() && fieldInfos.hasOffsets()) { names.add(name);/*from w w w . jav a 2s .co m*/ } } if (names.size() > 0) { int[] maxPassages = new int[names.size()]; for (int i = 0; i < maxPassages.length; i++) { maxPassages[i] = 1; } try { Map<String, String[]> stringMap = postingsHighlighter.highlightFields( names.toArray(new String[names.size()]), query, searcher, new int[] { docID }, maxPassages); for (Map.Entry<String, String[]> entry : stringMap.entrySet()) { String value = Arrays.toString(entry.getValue()); if (value.contains("<b>")) { if (excerpt.length() > 0) { excerpt.append("..."); } excerpt.append(value); } } } catch (Exception e) { LOG.error("postings highlighting failed", e); } } // fallback if no excerpt could be retrieved using postings highlighter if (excerpt.length() == 0) { for (IndexableField field : searcher.getIndexReader().document(doc.doc).getFields()) { String name = field.name(); // only full text or analyzed fields if (name.startsWith(FieldNames.FULLTEXT) || name.startsWith(FieldNames.ANALYZED_FIELD_PREFIX)) { String text = field.stringValue(); TokenStream tokenStream = analyzer.tokenStream(name, text); try { TextFragment[] textFragments = highlighter.getBestTextFragments(tokenStream, text, true, 1); if (textFragments != null && textFragments.length > 0) { for (TextFragment fragment : textFragments) { if (excerpt.length() > 0) { excerpt.append("..."); } excerpt.append(fragment.toString()); } break; } } catch (InvalidTokenOffsetsException e) { LOG.error("higlighting failed", e); } } } } return excerpt.toString(); }