List of usage examples for org.apache.lucene.search.vectorhighlight FieldPhraseList FieldPhraseList
public FieldPhraseList(FieldTermStack fieldTermStack, FieldQuery fieldQuery)
From source file:net.sourceforge.docfetcher.model.search.HighlightService.java
License:Open Source License
@MutableCopy @NotNull/*from w w w. j a v a 2 s. c o m*/ @SuppressWarnings("unchecked") private static List<Range> highlightPhrases(@NotNull Query query, @NotNull String text) throws CheckedOutOfMemoryError { // FastVectorHighlighter only supports TermQuery, PhraseQuery and BooleanQuery FastVectorHighlighter highlighter = new FastVectorHighlighter(true, true, null, null); FieldQuery fieldQuery = highlighter.getFieldQuery(query); Directory directory = new RAMDirectory(); try { /* * Hack: We have to put the given text in a RAM index, because the * fast-vector highlighter can only work on index readers */ IndexWriterAdapter writer = new IndexWriterAdapter(directory); Document doc = new Document(); doc.add(Fields.createContent(text, true)); // must store token positions and offsets writer.add(doc); Closeables.closeQuietly(writer); // flush unwritten documents into index IndexReader indexReader = IndexReader.open(directory); // This might throw an OutOfMemoryError FieldTermStack fieldTermStack = new FieldTermStack(indexReader, 0, Fields.CONTENT.key(), fieldQuery); FieldPhraseList fieldPhraseList = new FieldPhraseList(fieldTermStack, fieldQuery); // Hack: We'll use reflection to access a private field java.lang.reflect.Field field = fieldPhraseList.getClass().getDeclaredField("phraseList"); field.setAccessible(true); LinkedList<WeightedPhraseInfo> infoList = (LinkedList<WeightedPhraseInfo>) field.get(fieldPhraseList); List<Range> ranges = new ArrayList<Range>(infoList.size()); for (WeightedPhraseInfo phraseInfo : infoList) { int start = phraseInfo.getStartOffset(); int end = phraseInfo.getEndOffset(); ranges.add(new Range(start, end - start)); } return ranges; } catch (OutOfMemoryError e) { throw new CheckedOutOfMemoryError(e); } catch (Exception e) { return new ArrayList<Range>(0); } }
From source file:net.sourceforge.docfetcher.model.search.HighlightServiceTest.java
License:Open Source License
@SuppressWarnings("unchecked") @Test/*w w w . j a v a 2s .co m*/ public void testPhraseHighlighter() throws Exception { // Create index Directory directory = new RAMDirectory(); Analyzer analyzer = new StandardAnalyzer(IndexRegistry.LUCENE_VERSION, Collections.EMPTY_SET); IndexWriterAdapter writer = new IndexWriterAdapter(directory); Document doc = new Document(); doc.add(new Field("content", "some text", Store.NO, Index.ANALYZED, TermVector.WITH_POSITIONS_OFFSETS)); writer.add(doc); Closeables.closeQuietly(writer); // flush unwritten documents into index // Perform phrase search QueryParser queryParser = new QueryParser(IndexRegistry.LUCENE_VERSION, "content", analyzer); Query query = queryParser.parse("\"text\""); FastVectorHighlighter highlighter = new FastVectorHighlighter(true, true, null, null); FieldQuery fieldQuery = highlighter.getFieldQuery(query); IndexSearcher searcher = null; try { searcher = new IndexSearcher(directory); TopDocs docs = searcher.search(query, 10); assertEquals(1, docs.scoreDocs.length); int docId = docs.scoreDocs[0].doc; // Get phrase highlighting offsets FieldTermStack fieldTermStack = new FieldTermStack(searcher.getIndexReader(), docId, "content", fieldQuery); FieldPhraseList fieldPhraseList = new FieldPhraseList(fieldTermStack, fieldQuery); java.lang.reflect.Field field = fieldPhraseList.getClass().getDeclaredField("phraseList"); field.setAccessible(true); LinkedList<WeightedPhraseInfo> list = (LinkedList<WeightedPhraseInfo>) field.get(fieldPhraseList); assertEquals(5, list.get(0).getStartOffset()); assertEquals(9, list.get(0).getEndOffset()); } finally { Closeables.closeQuietly(searcher); } }
From source file:net.sourceforge.vaticanfetcher.model.search.HighlightServiceTest.java
License:Open Source License
@SuppressWarnings("unchecked") @Test// w w w . j a va2 s . c o m public void testPhraseHighlighter() throws Exception { // Create index Directory directory = new RAMDirectory(); Analyzer analyzer = new StandardAnalyzer(IndexRegistry.LUCENE_VERSION, Collections.EMPTY_SET); IndexWriterAdapter writer = new IndexWriterAdapter(directory); Document doc = new Document(); doc.add(new Field("content", "some text", Store.NO, Index.ANALYZED, TermVector.WITH_POSITIONS_OFFSETS)); writer.add(doc); Closeables.closeQuietly(writer); // flush unwritten documents into index // Perform phrase search QueryParser queryParser = new QueryParser(IndexRegistry.LUCENE_VERSION, "content", analyzer); Query query = queryParser.parse("\"text\""); FastVectorHighlighter highlighter = new FastVectorHighlighter(true, true, null, null); FieldQuery fieldQuery = highlighter.getFieldQuery(query); IndexSearcher searcher = new IndexSearcher(directory); TopDocs docs = searcher.search(query, 10); assertEquals(1, docs.scoreDocs.length); int docId = docs.scoreDocs[0].doc; // Get phrase highlighting offsets FieldTermStack fieldTermStack = new FieldTermStack(searcher.getIndexReader(), docId, "content", fieldQuery); FieldPhraseList fieldPhraseList = new FieldPhraseList(fieldTermStack, fieldQuery); java.lang.reflect.Field field = fieldPhraseList.getClass().getDeclaredField("phraseList"); field.setAccessible(true); LinkedList<WeightedPhraseInfo> list = (LinkedList<WeightedPhraseInfo>) field.get(fieldPhraseList); assertEquals(5, list.get(0).getStartOffset()); assertEquals(9, list.get(0).getEndOffset()); }