List of usage examples for org.apache.solr.client.solrj SolrQuery setHighlightSnippets
public SolrQuery setHighlightSnippets(int num)
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 ""; } }