From f11573ba1df9498769a1c8bccb8a239165cb7e3e Mon Sep 17 00:00:00 2001 From: Eugene Livis Date: Thu, 7 Jul 2016 14:22:16 -0400 Subject: [PATCH 1/9] debugging highlighting solr query --- .../autopsy/keywordsearch/KeywordSearchResultFactory.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchResultFactory.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchResultFactory.java index 24d32c76bc..48ccf10e9b 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchResultFactory.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchResultFactory.java @@ -276,10 +276,11 @@ class KeywordSearchResultFactory extends ChildFactory { int curTerm = 0; for (String term : hitTerms) { //escape subqueries, they shouldn't be escaped again later - final String termS = KeywordSearchUtil.escapeLuceneQuery(term); + /*final String termS = KeywordSearchUtil.escapeLuceneQuery(term); highlightQuery.append("\""); highlightQuery.append(termS); - highlightQuery.append("\""); + highlightQuery.append("\"");*/ + highlightQuery.append(term); // ELDEBUG if (lastTerm != curTerm) { highlightQuery.append(" "); //acts as OR || //force HIGHLIGHT_FIELD_REGEX index and stored content From b29681356d76b22f39196ad8f9313fcc15ea5d60 Mon Sep 17 00:00:00 2001 From: Eugene Livis Date: Thu, 14 Jul 2016 13:01:44 -0400 Subject: [PATCH 2/9] Catching all exceptions when querying Solr for highlighting --- .../org/sleuthkit/autopsy/keywordsearch/HighlightedText.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/HighlightedText.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/HighlightedText.java index a9b7524538..4bc5a5897a 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/HighlightedText.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/HighlightedText.java @@ -379,7 +379,7 @@ class HighlightedText implements IndexedText, TextMarkupLookup { return "
" + highlightedContent + "
"; //NON-NLS } - } catch (NoOpenCoreException | KeywordSearchModuleException ex) { + } catch (Exception ex) { return NbBundle.getMessage(this.getClass(), "HighlightedMatchesSource.getMarkup.queryFailedMsg"); } } From d3b3efa657d257ee43a5c391a8c35dc3ed8efb05 Mon Sep 17 00:00:00 2001 From: Eugene Livis Date: Fri, 15 Jul 2016 12:30:12 -0400 Subject: [PATCH 3/9] Fixed several bugs in Solr highlighting query construction and escaping --- .../keywordsearch/HighlightedText.java | 21 ++++++++------- .../KeywordSearchResultFactory.java | 26 +++++++++++++------ 2 files changed, 30 insertions(+), 17 deletions(-) diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/HighlightedText.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/HighlightedText.java index 4bc5a5897a..1ed1941a1b 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/HighlightedText.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/HighlightedText.java @@ -298,26 +298,28 @@ class HighlightedText implements IndexedText, TextMarkupLookup { String highLightField = null; - String highlightQuery = keywordHitQuery; + //String highlightQuery = keywordHitQuery; if (isRegex) { highLightField = LuceneQuery.HIGHLIGHT_FIELD_REGEX; //escape special lucene chars if not already escaped (if not a compound query) //TODO a better way to mark it a compound highlight query - final String findSubstr = LuceneQuery.HIGHLIGHT_FIELD_REGEX + ":"; - if (!highlightQuery.contains(findSubstr)) { - highlightQuery = KeywordSearchUtil.escapeLuceneQuery(highlightQuery); - } + + // ELDEBUG: + //final String findSubstr = LuceneQuery.HIGHLIGHT_FIELD_REGEX + ":"; + //if (!highlightQuery.contains(findSubstr)) { + // highlightQuery = KeywordSearchUtil.escapeLuceneQuery(highlightQuery); + //} } else { highLightField = LuceneQuery.HIGHLIGHT_FIELD_LITERAL; //escape special lucene chars always for literal queries query - highlightQuery = KeywordSearchUtil.escapeLuceneQuery(highlightQuery); + //highlightQuery = KeywordSearchUtil.escapeLuceneQuery(highlightQuery); } SolrQuery q = new SolrQuery(); q.setShowDebugInfo(DEBUG); //debug - String queryStr = null; + /*String queryStr = null; if (isRegex) { StringBuilder sb = new StringBuilder(); @@ -334,9 +336,10 @@ class HighlightedText implements IndexedText, TextMarkupLookup { //use default field, simplifies query //always force grouping/quotes queryStr = KeywordSearchUtil.quoteQuery(highlightQuery); - } + }*/ - q.setQuery(queryStr); + //q.setQuery(queryStr); + q.setQuery(keywordHitQuery); String contentIdStr = Long.toString(this.objectId); if (hasChunks) { diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchResultFactory.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchResultFactory.java index 48ccf10e9b..aabe37f9fc 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchResultFactory.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchResultFactory.java @@ -247,19 +247,20 @@ class KeywordSearchResultFactory extends ChildFactory { * @return */ private String getHighlightQuery(KeywordSearchQuery query, boolean literal_query, QueryResults queryResults, Content content) { - String highlightQueryEscaped; + //String highlightQueryEscaped; + StringBuilder highlightQuery = new StringBuilder(); if (literal_query) { //literal, treat as non-regex, non-term component query - highlightQueryEscaped = query.getQueryString(); + highlightQuery.append(LuceneQuery.HIGHLIGHT_FIELD_LITERAL).append(":").append(KeywordSearchUtil.escapeLuceneQuery(query.getQueryString())); } else { //construct a Solr query using aggregated terms to get highlighting //the query is executed later on demand - StringBuilder highlightQuery = new StringBuilder(); if (queryResults.getKeywords().size() == 1) { //simple case, no need to process subqueries and do special escaping Keyword term = queryResults.getKeywords().iterator().next(); - highlightQuery.append(term.toString()); + //highlightQuery.append(term.toString()); + highlightQuery.append(LuceneQuery.HIGHLIGHT_FIELD_REGEX).append(":").append(KeywordSearchUtil.escapeLuceneQuery(term.toString())); } else { //find terms for this content hit List hitTerms = new ArrayList<>(); @@ -276,26 +277,35 @@ class KeywordSearchResultFactory extends ChildFactory { int curTerm = 0; for (String term : hitTerms) { //escape subqueries, they shouldn't be escaped again later + //StringBuilder currentKeywordQuery = new StringBuilder(); + //currentKeywordQuery.append(LuceneQuery.HIGHLIGHT_FIELD_REGEX).append(":").append(KeywordSearchUtil.escapeLuceneQuery(term)); + //highlightQuery.append(KeywordSearchUtil.quoteQuery(currentKeywordQuery.toString())); + + highlightQuery.append(LuceneQuery.HIGHLIGHT_FIELD_REGEX).append(":").append(KeywordSearchUtil.escapeLuceneQuery(term)); + /*final String termS = KeywordSearchUtil.escapeLuceneQuery(term); highlightQuery.append("\""); highlightQuery.append(termS); highlightQuery.append("\"");*/ - highlightQuery.append(term); // ELDEBUG + + //highlightQuery.append(term); // ELDEBUG if (lastTerm != curTerm) { highlightQuery.append(" "); //acts as OR || //force HIGHLIGHT_FIELD_REGEX index and stored content //in each term after first. First term taken care by HighlightedMatchesSource - highlightQuery.append(LuceneQuery.HIGHLIGHT_FIELD_REGEX).append(":"); + + //highlightQuery.append(LuceneQuery.HIGHLIGHT_FIELD_REGEX).append(":"); } ++curTerm; } } //String highlightQueryEscaped = KeywordSearchUtil.escapeLuceneQuery(highlightQuery.toString()); - highlightQueryEscaped = highlightQuery.toString(); + + //highlightQueryEscaped = highlightQuery.toString(); } - return highlightQueryEscaped; + return highlightQuery.toString(); } @Override From e44e9b76c8fdd54882aff0e8ad2a306b249c6d71 Mon Sep 17 00:00:00 2001 From: Eugene Livis Date: Fri, 15 Jul 2016 13:01:25 -0400 Subject: [PATCH 4/9] Simplified search query. Fixed a bug with escaping of aggregated term queries --- .../keywordsearch/KeywordSearchResultFactory.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchResultFactory.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchResultFactory.java index aabe37f9fc..9570336182 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchResultFactory.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchResultFactory.java @@ -260,14 +260,15 @@ class KeywordSearchResultFactory extends ChildFactory { //simple case, no need to process subqueries and do special escaping Keyword term = queryResults.getKeywords().iterator().next(); //highlightQuery.append(term.toString()); - highlightQuery.append(LuceneQuery.HIGHLIGHT_FIELD_REGEX).append(":").append(KeywordSearchUtil.escapeLuceneQuery(term.toString())); + //highlightQuery.append(LuceneQuery.HIGHLIGHT_FIELD_REGEX).append(":").append(KeywordSearchUtil.escapeLuceneQuery(term.toString())); + highlightQuery.append(LuceneQuery.HIGHLIGHT_FIELD_REGEX).append(":").append(KeywordSearchUtil.escapeLuceneQuery(term.getQuery())); } else { //find terms for this content hit - List hitTerms = new ArrayList<>(); + List hitTerms = new ArrayList<>(); for (Keyword keyword : queryResults.getKeywords()) { for (KeywordHit hit : queryResults.getResults(keyword)) { if (hit.getContent().equals(content)) { - hitTerms.add(keyword.toString()); + hitTerms.add(keyword); break; //go to next term } } @@ -275,13 +276,13 @@ class KeywordSearchResultFactory extends ChildFactory { final int lastTerm = hitTerms.size() - 1; int curTerm = 0; - for (String term : hitTerms) { + for (Keyword term : hitTerms) { //escape subqueries, they shouldn't be escaped again later //StringBuilder currentKeywordQuery = new StringBuilder(); //currentKeywordQuery.append(LuceneQuery.HIGHLIGHT_FIELD_REGEX).append(":").append(KeywordSearchUtil.escapeLuceneQuery(term)); //highlightQuery.append(KeywordSearchUtil.quoteQuery(currentKeywordQuery.toString())); - highlightQuery.append(LuceneQuery.HIGHLIGHT_FIELD_REGEX).append(":").append(KeywordSearchUtil.escapeLuceneQuery(term)); + highlightQuery.append(LuceneQuery.HIGHLIGHT_FIELD_REGEX).append(":").append("\"").append(KeywordSearchUtil.escapeLuceneQuery(term.getQuery())).append("\""); /*final String termS = KeywordSearchUtil.escapeLuceneQuery(term); highlightQuery.append("\""); From 9dfe64a71aa5393c52dfcb553cc4b5f76e960a2d Mon Sep 17 00:00:00 2001 From: Eugene Livis Date: Fri, 15 Jul 2016 13:05:57 -0400 Subject: [PATCH 5/9] Code and comment cleanup --- .../keywordsearch/HighlightedText.java | 33 +------------------ .../KeywordSearchResultFactory.java | 24 +------------- 2 files changed, 2 insertions(+), 55 deletions(-) diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/HighlightedText.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/HighlightedText.java index 1ed1941a1b..8601349b97 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/HighlightedText.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/HighlightedText.java @@ -298,47 +298,16 @@ class HighlightedText implements IndexedText, TextMarkupLookup { String highLightField = null; - //String highlightQuery = keywordHitQuery; - if (isRegex) { highLightField = LuceneQuery.HIGHLIGHT_FIELD_REGEX; - //escape special lucene chars if not already escaped (if not a compound query) - //TODO a better way to mark it a compound highlight query - - // ELDEBUG: - //final String findSubstr = LuceneQuery.HIGHLIGHT_FIELD_REGEX + ":"; - //if (!highlightQuery.contains(findSubstr)) { - // highlightQuery = KeywordSearchUtil.escapeLuceneQuery(highlightQuery); - //} } else { highLightField = LuceneQuery.HIGHLIGHT_FIELD_LITERAL; - //escape special lucene chars always for literal queries query - //highlightQuery = KeywordSearchUtil.escapeLuceneQuery(highlightQuery); } SolrQuery q = new SolrQuery(); q.setShowDebugInfo(DEBUG); //debug - /*String queryStr = null; - - if (isRegex) { - StringBuilder sb = new StringBuilder(); - sb.append(highLightField).append(":"); - if (group) { - sb.append("\""); - } - sb.append(highlightQuery); - if (group) { - sb.append("\""); - } - queryStr = sb.toString(); - } else { - //use default field, simplifies query - //always force grouping/quotes - queryStr = KeywordSearchUtil.quoteQuery(highlightQuery); - }*/ - - //q.setQuery(queryStr); + // input query has already been escaped q.setQuery(keywordHitQuery); String contentIdStr = Long.toString(this.objectId); diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchResultFactory.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchResultFactory.java index 9570336182..8afad89cfc 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchResultFactory.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchResultFactory.java @@ -247,7 +247,6 @@ class KeywordSearchResultFactory extends ChildFactory { * @return */ private String getHighlightQuery(KeywordSearchQuery query, boolean literal_query, QueryResults queryResults, Content content) { - //String highlightQueryEscaped; StringBuilder highlightQuery = new StringBuilder(); if (literal_query) { //literal, treat as non-regex, non-term component query @@ -255,12 +254,9 @@ class KeywordSearchResultFactory extends ChildFactory { } else { //construct a Solr query using aggregated terms to get highlighting //the query is executed later on demand - if (queryResults.getKeywords().size() == 1) { //simple case, no need to process subqueries and do special escaping Keyword term = queryResults.getKeywords().iterator().next(); - //highlightQuery.append(term.toString()); - //highlightQuery.append(LuceneQuery.HIGHLIGHT_FIELD_REGEX).append(":").append(KeywordSearchUtil.escapeLuceneQuery(term.toString())); highlightQuery.append(LuceneQuery.HIGHLIGHT_FIELD_REGEX).append(":").append(KeywordSearchUtil.escapeLuceneQuery(term.getQuery())); } else { //find terms for this content hit @@ -277,33 +273,15 @@ class KeywordSearchResultFactory extends ChildFactory { final int lastTerm = hitTerms.size() - 1; int curTerm = 0; for (Keyword term : hitTerms) { - //escape subqueries, they shouldn't be escaped again later - //StringBuilder currentKeywordQuery = new StringBuilder(); - //currentKeywordQuery.append(LuceneQuery.HIGHLIGHT_FIELD_REGEX).append(":").append(KeywordSearchUtil.escapeLuceneQuery(term)); - //highlightQuery.append(KeywordSearchUtil.quoteQuery(currentKeywordQuery.toString())); - + //escape subqueries, MAKE SURE they are not escaped again later highlightQuery.append(LuceneQuery.HIGHLIGHT_FIELD_REGEX).append(":").append("\"").append(KeywordSearchUtil.escapeLuceneQuery(term.getQuery())).append("\""); - - /*final String termS = KeywordSearchUtil.escapeLuceneQuery(term); - highlightQuery.append("\""); - highlightQuery.append(termS); - highlightQuery.append("\"");*/ - - //highlightQuery.append(term); // ELDEBUG if (lastTerm != curTerm) { highlightQuery.append(" "); //acts as OR || - //force HIGHLIGHT_FIELD_REGEX index and stored content - //in each term after first. First term taken care by HighlightedMatchesSource - - //highlightQuery.append(LuceneQuery.HIGHLIGHT_FIELD_REGEX).append(":"); } ++curTerm; } } - //String highlightQueryEscaped = KeywordSearchUtil.escapeLuceneQuery(highlightQuery.toString()); - - //highlightQueryEscaped = highlightQuery.toString(); } return highlightQuery.toString(); From 5adb67ceb0be1a38aa406ae65c6d09705fe841fa Mon Sep 17 00:00:00 2001 From: Eugene Livis Date: Fri, 15 Jul 2016 13:08:50 -0400 Subject: [PATCH 6/9] Code and comment cleanup --- .../org/sleuthkit/autopsy/keywordsearch/HighlightedText.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/HighlightedText.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/HighlightedText.java index 8601349b97..1d71cb0934 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/HighlightedText.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/HighlightedText.java @@ -307,7 +307,7 @@ class HighlightedText implements IndexedText, TextMarkupLookup { SolrQuery q = new SolrQuery(); q.setShowDebugInfo(DEBUG); //debug - // input query has already been escaped + // input query has already been properly constructed and escaped q.setQuery(keywordHitQuery); String contentIdStr = Long.toString(this.objectId); From 102b2b4c5697add0a97f5f5ac49dcf2b3a1d708c Mon Sep 17 00:00:00 2001 From: Eugene Livis Date: Fri, 15 Jul 2016 13:16:09 -0400 Subject: [PATCH 7/9] Fixed a bug when literal search string contains caracters that need to be escaped --- .../autopsy/keywordsearch/KeywordSearchResultFactory.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchResultFactory.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchResultFactory.java index 8afad89cfc..0628aeef3b 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchResultFactory.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchResultFactory.java @@ -250,14 +250,14 @@ class KeywordSearchResultFactory extends ChildFactory { StringBuilder highlightQuery = new StringBuilder(); if (literal_query) { //literal, treat as non-regex, non-term component query - highlightQuery.append(LuceneQuery.HIGHLIGHT_FIELD_LITERAL).append(":").append(KeywordSearchUtil.escapeLuceneQuery(query.getQueryString())); + highlightQuery.append(LuceneQuery.HIGHLIGHT_FIELD_LITERAL).append(":").append("\"").append(KeywordSearchUtil.escapeLuceneQuery(query.getQueryString())).append("\""); } else { //construct a Solr query using aggregated terms to get highlighting //the query is executed later on demand if (queryResults.getKeywords().size() == 1) { //simple case, no need to process subqueries and do special escaping Keyword term = queryResults.getKeywords().iterator().next(); - highlightQuery.append(LuceneQuery.HIGHLIGHT_FIELD_REGEX).append(":").append(KeywordSearchUtil.escapeLuceneQuery(term.getQuery())); + highlightQuery.append(LuceneQuery.HIGHLIGHT_FIELD_REGEX).append(":").append("\"").append(KeywordSearchUtil.escapeLuceneQuery(term.getQuery())).append("\""); } else { //find terms for this content hit List hitTerms = new ArrayList<>(); From 77330b8c325b39d7f453aeda744adcedb5ef04a5 Mon Sep 17 00:00:00 2001 From: Eugene Livis Date: Fri, 15 Jul 2016 13:33:14 -0400 Subject: [PATCH 8/9] Optimizated algorithm and removed code duplication --- .../KeywordSearchResultFactory.java | 28 +++++++++++++++---- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchResultFactory.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchResultFactory.java index 0628aeef3b..835fe539ee 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchResultFactory.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchResultFactory.java @@ -247,17 +247,16 @@ class KeywordSearchResultFactory extends ChildFactory { * @return */ private String getHighlightQuery(KeywordSearchQuery query, boolean literal_query, QueryResults queryResults, Content content) { - StringBuilder highlightQuery = new StringBuilder(); if (literal_query) { //literal, treat as non-regex, non-term component query - highlightQuery.append(LuceneQuery.HIGHLIGHT_FIELD_LITERAL).append(":").append("\"").append(KeywordSearchUtil.escapeLuceneQuery(query.getQueryString())).append("\""); + return constructEscapedSolrQuery(query.getQueryString(), literal_query); } else { //construct a Solr query using aggregated terms to get highlighting //the query is executed later on demand if (queryResults.getKeywords().size() == 1) { //simple case, no need to process subqueries and do special escaping Keyword term = queryResults.getKeywords().iterator().next(); - highlightQuery.append(LuceneQuery.HIGHLIGHT_FIELD_REGEX).append(":").append("\"").append(KeywordSearchUtil.escapeLuceneQuery(term.getQuery())).append("\""); + return constructEscapedSolrQuery(term.getQuery(), literal_query); } else { //find terms for this content hit List hitTerms = new ArrayList<>(); @@ -270,20 +269,39 @@ class KeywordSearchResultFactory extends ChildFactory { } } + StringBuilder highlightQuery = new StringBuilder(); final int lastTerm = hitTerms.size() - 1; int curTerm = 0; for (Keyword term : hitTerms) { //escape subqueries, MAKE SURE they are not escaped again later - highlightQuery.append(LuceneQuery.HIGHLIGHT_FIELD_REGEX).append(":").append("\"").append(KeywordSearchUtil.escapeLuceneQuery(term.getQuery())).append("\""); + highlightQuery.append(constructEscapedSolrQuery(term.getQuery(), literal_query)); if (lastTerm != curTerm) { highlightQuery.append(" "); //acts as OR || } ++curTerm; } + return highlightQuery.toString(); } } - + } + + /** + * Constructs a complete, escaped Solr query that is ready to be used. + * + * @param query keyword term to be searched for + * @param literal_query flag whether query is literal or regex + * @return Solr query string + */ + private String constructEscapedSolrQuery(String query, boolean literal_query) { + StringBuilder highlightQuery = new StringBuilder(); + String highLightField; + if (literal_query) { + highLightField = LuceneQuery.HIGHLIGHT_FIELD_LITERAL; + } else { + highLightField = LuceneQuery.HIGHLIGHT_FIELD_REGEX; + } + highlightQuery.append(highLightField).append(":").append("\"").append(KeywordSearchUtil.escapeLuceneQuery(query)).append("\""); return highlightQuery.toString(); } From 53c0b905804dab30465022a2eb83aa48a0b4abbf Mon Sep 17 00:00:00 2001 From: Eugene Livis Date: Fri, 15 Jul 2016 15:32:26 -0400 Subject: [PATCH 9/9] Added logging when an exception is caught. Modified UI text --- .../src/org/sleuthkit/autopsy/keywordsearch/Bundle.properties | 2 +- .../org/sleuthkit/autopsy/keywordsearch/HighlightedText.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle.properties b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle.properties index 8b1f465b6a..74c70118bc 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle.properties +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle.properties @@ -64,7 +64,7 @@ ExtractedContentViewer.getTitle=Indexed Text ExtractedContentViewer.getSolrContent.knownFileMsg=

{0} is a known file (based on MD5 hash) and does not have text in the index.

ExtractedContentViewer.getSolrContent.noTxtYetMsg=

{0} does not have text in the index.
It may have no text, not been analyzed yet, or keyword search was not enabled during ingest.

ExtractedContentViewer.getSolrContent.txtBodyItal={0} -HighlightedMatchesSource.getMarkup.noMatchMsg=
There were no keyword hits on this page. 
Keyword could have been in file name.
Advance to another page for hits or choose Extracted Text to view original text..
+HighlightedMatchesSource.getMarkup.noMatchMsg=
There were no keyword hits on this page. 
Keyword could have been in file name.
Advance to another page for hits or to view original text choose File Text
in the drop down menu to the right..
HighlightedMatchesSource.getMarkup.queryFailedMsg=
Failed to retrieve keyword hit results. 
Confirm that Autopsy can connect to the Solr server.
HighlightedMatchesSource.toString=Search Results Installer.reportPortError=Indexing server port {0} is not available. Check if your security software does not block {1} and consider changing {2} in {3} property file in the application user folder. Then try rebooting your system if another process was causing the conflict. diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/HighlightedText.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/HighlightedText.java index 1d71cb0934..4e4b55d5f7 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/HighlightedText.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/HighlightedText.java @@ -339,7 +339,6 @@ class HighlightedText implements IndexedText, TextMarkupLookup { Map> responseHighlightID = responseHighlight.get(contentIdStr); if (responseHighlightID == null) { return NbBundle.getMessage(this.getClass(), "HighlightedMatchesSource.getMarkup.noMatchMsg"); - } List contentHighlights = responseHighlightID.get(highLightField); if (contentHighlights == null) { @@ -352,6 +351,7 @@ class HighlightedText implements IndexedText, TextMarkupLookup { return "
" + highlightedContent + "
"; //NON-NLS } } catch (Exception ex) { + logger.log(Level.WARNING, "Error executing Solr highlighting query: " + keywordHitQuery, ex); //NON-NLS return NbBundle.getMessage(this.getClass(), "HighlightedMatchesSource.getMarkup.queryFailedMsg"); } }