From f67715bc599cf9e3e9e9415eae2ab19e38a1d06e Mon Sep 17 00:00:00 2001 From: adam-m Date: Fri, 6 Jan 2012 15:55:57 -0500 Subject: [PATCH] Fix to make .* regex queries more feasible (no need to send term containing * char to Solr) --- .../KeywordSearchResultFactory.java | 9 +++++++-- .../keywordsearch/TermComponentQuery.java | 18 ++++++++++-------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchResultFactory.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchResultFactory.java index 7665305c20..dc265dfc02 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchResultFactory.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchResultFactory.java @@ -184,10 +184,15 @@ public class KeywordSearchResultFactory extends ChildFactory { //the query is executed later on demand StringBuilder highlightQuery = new StringBuilder(); Collection terms = tcq.getTerms(); + final int lastTerm = terms.size() -1; + int curTerm = 0; for (Term term : terms) { final String termS = KeywordSearchUtil.escapeLuceneQuery(term.getTerm(), true); - highlightQuery.append(termS); - highlightQuery.append(" "); + if (! termS.contains("*")) { + highlightQuery.append(termS); + if (lastTerm != curTerm) + highlightQuery.append(" "); + } } //String highlightQueryEscaped = KeywordSearchUtil.escapeLuceneQuery(highlightQuery.toString()); String highlightQueryEscaped = highlightQuery.toString(); diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/TermComponentQuery.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/TermComponentQuery.java index d25a8c1dd9..db9f995bdd 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/TermComponentQuery.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/TermComponentQuery.java @@ -165,21 +165,23 @@ public class TermComponentQuery implements KeywordSearchQuery { //it's much more efficient and should yield the same file IDs as per match queries //requires http POST query method due to potentially large query size StringBuilder filesQueryB = new StringBuilder(); - final int lastTerm = terms.size() -1; + final int lastTerm = terms.size() - 1; int curTerm = 0; for (Term term : terms) { - //final String termS = KeywordSearchUtil.escapeLuceneQuery(term.getTerm(), true); final String termS = term.getTerm(); - filesQueryB.append(termS); - if (curTerm != lastTerm) - filesQueryB.append(" "); + if (!termS.contains("*")) { + filesQueryB.append(termS); + if (curTerm != lastTerm) { + filesQueryB.append(" "); + } + } ++curTerm; } List uniqueMatches = new ArrayList(); - if (! terms.isEmpty()) { + if (!terms.isEmpty()) { LuceneQuery filesQuery = new LuceneQuery(filesQueryB.toString()); - filesQuery.escape(); //TODO escaping invididual terms above instead could make a difference to Solr + filesQuery.escape(); try { uniqueMatches = filesQuery.performQuery(); } catch (RuntimeException e) { @@ -198,7 +200,7 @@ public class TermComponentQuery implements KeywordSearchQuery { results.add(f); } } - + return results;