Example usage for org.apache.lucene.search.vectorhighlight FieldPhraseList FieldPhraseList

List of usage examples for org.apache.lucene.search.vectorhighlight FieldPhraseList FieldPhraseList

Introduction

In this page you can find the example usage for org.apache.lucene.search.vectorhighlight FieldPhraseList FieldPhraseList.

Prototype

public FieldPhraseList(FieldTermStack fieldTermStack, FieldQuery fieldQuery) 

Source Link

Document

create a FieldPhraseList that has no limit on the number of phrases to analyze

Usage

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());
}