Example usage for org.apache.solr.client.solrj SolrQuery setHighlightSnippets

List of usage examples for org.apache.solr.client.solrj SolrQuery setHighlightSnippets

Introduction

In this page you can find the example usage for org.apache.solr.client.solrj SolrQuery setHighlightSnippets.

Prototype

public SolrQuery setHighlightSnippets(int num) 

Source Link

Usage

From source file:org.sleuthkit.autopsy.keywordsearch.LuceneQuery.java

License:Open Source License

/**
 * Create the query object for the stored keyword
 *
 * @param snippets True if query should request snippets
 * @return/*from ww  w .  ja v a2 s .co m*/
 */
private SolrQuery createAndConfigureSolrQuery(boolean snippets) {
    SolrQuery q = new SolrQuery();
    q.setShowDebugInfo(DEBUG); //debug
    //set query, force quotes/grouping around all literal queries
    final String groupedQuery = KeywordSearchUtil.quoteQuery(keywordStringEscaped);
    String theQueryStr = groupedQuery;
    if (field != null) {
        //use the optional field
        StringBuilder sb = new StringBuilder();
        sb.append(field).append(":").append(groupedQuery);
        theQueryStr = sb.toString();
    }
    q.setQuery(theQueryStr);
    q.setRows(MAX_RESULTS);

    if (snippets) {
        q.setFields(Server.Schema.ID.toString());
    } else {
        q.setFields(Server.Schema.ID.toString());
    }

    for (KeywordQueryFilter filter : filters) {
        q.addFilterQuery(filter.toString());
    }

    if (snippets) {
        q.addHighlightField(Server.Schema.TEXT.toString());
        //q.setHighlightSimplePre("«"); //original highlighter only
        //q.setHighlightSimplePost("»");  //original highlighter only
        q.setHighlightSnippets(1);
        q.setHighlightFragsize(SNIPPET_LENGTH);

        //tune the highlighter
        q.setParam("hl.useFastVectorHighlighter", "on"); //fast highlighter scales better than standard one NON-NLS
        q.setParam("hl.tag.pre", "«"); //makes sense for FastVectorHighlighter only NON-NLS
        q.setParam("hl.tag.post", "«"); //makes sense for FastVectorHighlighter only NON-NLS
        q.setParam("hl.fragListBuilder", "simple"); //makes sense for FastVectorHighlighter only NON-NLS

        //Solr bug if fragCharSize is smaller than Query string, StringIndexOutOfBoundsException is thrown.
        q.setParam("hl.fragCharSize", Integer.toString(theQueryStr.length())); //makes sense for FastVectorHighlighter only NON-NLS

        //docs says makes sense for the original Highlighter only, but not really
        //analyze all content SLOW! consider lowering
        q.setParam("hl.maxAnalyzedChars", Server.HL_ANALYZE_CHARS_UNLIMITED); //NON-NLS
    }

    return q;
}

From source file:org.sleuthkit.autopsy.keywordsearch.LuceneQuery.java

License:Open Source License

/**
 * return snippet preview context//from  www  .j  ava  2s  . c  o  m
 *
 * @param query the keyword query for text to highlight. Lucene special
 * cahrs should already be escaped.
 * @param solrObjectId Solr object id associated with the hit
 * @param chunkID chunk id associated with the content hit, or 0 if no
 * chunks
 * @param isRegex whether the query is a regular expression (different Solr
 * fields are then used to generate the preview)
 * @param group whether the query should look for all terms grouped together
 * in the query order, or not
 * @return
 */
public static String querySnippet(String query, long solrObjectId, int chunkID, boolean isRegex, boolean group)
        throws NoOpenCoreException {
    Server solrServer = KeywordSearch.getServer();

    String highlightField;
    if (isRegex) {
        highlightField = LuceneQuery.HIGHLIGHT_FIELD_REGEX;
    } else {
        highlightField = LuceneQuery.HIGHLIGHT_FIELD_LITERAL;
    }

    SolrQuery q = new SolrQuery();

    String queryStr;

    if (isRegex) {
        StringBuilder sb = new StringBuilder();
        sb.append(highlightField).append(":");
        if (group) {
            sb.append("\"");
        }
        sb.append(query);
        if (group) {
            sb.append("\"");
        }

        queryStr = sb.toString();
    } else {
        //simplify query/escaping and use default field
        //always force grouping/quotes
        queryStr = KeywordSearchUtil.quoteQuery(query);
    }

    q.setQuery(queryStr);

    String contentIDStr;

    if (chunkID == 0) {
        contentIDStr = Long.toString(solrObjectId);
    } else {
        contentIDStr = Server.getChunkIdString(solrObjectId, chunkID);
    }

    String idQuery = Server.Schema.ID.toString() + ":" + KeywordSearchUtil.escapeLuceneQuery(contentIDStr);
    q.setShowDebugInfo(DEBUG); //debug
    q.addFilterQuery(idQuery);
    q.addHighlightField(highlightField);
    //q.setHighlightSimplePre("«"); //original highlighter only
    //q.setHighlightSimplePost("»");  //original highlighter only
    q.setHighlightSnippets(1);
    q.setHighlightFragsize(SNIPPET_LENGTH);

    //tune the highlighter
    q.setParam("hl.useFastVectorHighlighter", "on"); //fast highlighter scales better than standard one NON-NLS
    q.setParam("hl.tag.pre", "«"); //makes sense for FastVectorHighlighter only NON-NLS
    q.setParam("hl.tag.post", "«"); //makes sense for FastVectorHighlighter only NON-NLS
    q.setParam("hl.fragListBuilder", "simple"); //makes sense for FastVectorHighlighter only NON-NLS

    //Solr bug if fragCharSize is smaller than Query string, StringIndexOutOfBoundsException is thrown.
    q.setParam("hl.fragCharSize", Integer.toString(queryStr.length())); //makes sense for FastVectorHighlighter only NON-NLS

    //docs says makes sense for the original Highlighter only, but not really
    //analyze all content SLOW! consider lowering
    q.setParam("hl.maxAnalyzedChars", Server.HL_ANALYZE_CHARS_UNLIMITED); //NON-NLS

    try {
        QueryResponse response = solrServer.query(q, METHOD.POST);
        Map<String, Map<String, List<String>>> responseHighlight = response.getHighlighting();
        Map<String, List<String>> responseHighlightID = responseHighlight.get(contentIDStr);
        if (responseHighlightID == null) {
            return "";
        }
        List<String> contentHighlights = responseHighlightID.get(highlightField);
        if (contentHighlights == null) {
            return "";
        } else {
            // extracted content is HTML-escaped, but snippet goes in a plain text field
            return EscapeUtil.unEscapeHtml(contentHighlights.get(0)).trim();
        }
    } catch (NoOpenCoreException ex) {
        logger.log(Level.WARNING, "Error executing Lucene Solr Query: " + query, ex); //NON-NLS
        throw ex;
    } catch (KeywordSearchModuleException ex) {
        logger.log(Level.WARNING, "Error executing Lucene Solr Query: " + query, ex); //NON-NLS
        return "";
    }
}