Fix to make .* regex queries more feasible (no need to send term containing * char to Solr)

This commit is contained in:
adam-m 2012-01-06 15:55:57 -05:00
parent 6afe67afa0
commit f67715bc59
2 changed files with 17 additions and 10 deletions

View File

@ -184,11 +184,16 @@ public class KeywordSearchResultFactory extends ChildFactory<KeyValueThing> {
//the query is executed later on demand
StringBuilder highlightQuery = new StringBuilder();
Collection<Term> terms = tcq.getTerms();
final int lastTerm = terms.size() -1;
int curTerm = 0;
for (Term term : terms) {
final String termS = KeywordSearchUtil.escapeLuceneQuery(term.getTerm(), true);
if (! termS.contains("*")) {
highlightQuery.append(termS);
if (lastTerm != curTerm)
highlightQuery.append(" ");
}
}
//String highlightQueryEscaped = KeywordSearchUtil.escapeLuceneQuery(highlightQuery.toString());
String highlightQueryEscaped = highlightQuery.toString();

View File

@ -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();
if (!termS.contains("*")) {
filesQueryB.append(termS);
if (curTerm != lastTerm)
if (curTerm != lastTerm) {
filesQueryB.append(" ");
}
}
++curTerm;
}
List<FsContent> uniqueMatches = new ArrayList<FsContent>();
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) {