mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-19 11:07:43 +00:00
Fixed several bugs in Solr highlighting query construction and escaping
This commit is contained in:
parent
b29681356d
commit
d3b3efa657
@ -298,26 +298,28 @@ class HighlightedText implements IndexedText, TextMarkupLookup {
|
|||||||
|
|
||||||
String highLightField = null;
|
String highLightField = null;
|
||||||
|
|
||||||
String highlightQuery = keywordHitQuery;
|
//String highlightQuery = keywordHitQuery;
|
||||||
|
|
||||||
if (isRegex) {
|
if (isRegex) {
|
||||||
highLightField = LuceneQuery.HIGHLIGHT_FIELD_REGEX;
|
highLightField = LuceneQuery.HIGHLIGHT_FIELD_REGEX;
|
||||||
//escape special lucene chars if not already escaped (if not a compound query)
|
//escape special lucene chars if not already escaped (if not a compound query)
|
||||||
//TODO a better way to mark it a compound highlight query
|
//TODO a better way to mark it a compound highlight query
|
||||||
final String findSubstr = LuceneQuery.HIGHLIGHT_FIELD_REGEX + ":";
|
|
||||||
if (!highlightQuery.contains(findSubstr)) {
|
// ELDEBUG:
|
||||||
highlightQuery = KeywordSearchUtil.escapeLuceneQuery(highlightQuery);
|
//final String findSubstr = LuceneQuery.HIGHLIGHT_FIELD_REGEX + ":";
|
||||||
}
|
//if (!highlightQuery.contains(findSubstr)) {
|
||||||
|
// highlightQuery = KeywordSearchUtil.escapeLuceneQuery(highlightQuery);
|
||||||
|
//}
|
||||||
} else {
|
} else {
|
||||||
highLightField = LuceneQuery.HIGHLIGHT_FIELD_LITERAL;
|
highLightField = LuceneQuery.HIGHLIGHT_FIELD_LITERAL;
|
||||||
//escape special lucene chars always for literal queries query
|
//escape special lucene chars always for literal queries query
|
||||||
highlightQuery = KeywordSearchUtil.escapeLuceneQuery(highlightQuery);
|
//highlightQuery = KeywordSearchUtil.escapeLuceneQuery(highlightQuery);
|
||||||
}
|
}
|
||||||
|
|
||||||
SolrQuery q = new SolrQuery();
|
SolrQuery q = new SolrQuery();
|
||||||
q.setShowDebugInfo(DEBUG); //debug
|
q.setShowDebugInfo(DEBUG); //debug
|
||||||
|
|
||||||
String queryStr = null;
|
/*String queryStr = null;
|
||||||
|
|
||||||
if (isRegex) {
|
if (isRegex) {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
@ -334,9 +336,10 @@ class HighlightedText implements IndexedText, TextMarkupLookup {
|
|||||||
//use default field, simplifies query
|
//use default field, simplifies query
|
||||||
//always force grouping/quotes
|
//always force grouping/quotes
|
||||||
queryStr = KeywordSearchUtil.quoteQuery(highlightQuery);
|
queryStr = KeywordSearchUtil.quoteQuery(highlightQuery);
|
||||||
}
|
}*/
|
||||||
|
|
||||||
q.setQuery(queryStr);
|
//q.setQuery(queryStr);
|
||||||
|
q.setQuery(keywordHitQuery);
|
||||||
|
|
||||||
String contentIdStr = Long.toString(this.objectId);
|
String contentIdStr = Long.toString(this.objectId);
|
||||||
if (hasChunks) {
|
if (hasChunks) {
|
||||||
|
@ -247,19 +247,20 @@ class KeywordSearchResultFactory extends ChildFactory<KeyValueQueryContent> {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
private String getHighlightQuery(KeywordSearchQuery query, boolean literal_query, QueryResults queryResults, Content content) {
|
private String getHighlightQuery(KeywordSearchQuery query, boolean literal_query, QueryResults queryResults, Content content) {
|
||||||
String highlightQueryEscaped;
|
//String highlightQueryEscaped;
|
||||||
|
StringBuilder highlightQuery = new StringBuilder();
|
||||||
if (literal_query) {
|
if (literal_query) {
|
||||||
//literal, treat as non-regex, non-term component 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 {
|
} else {
|
||||||
//construct a Solr query using aggregated terms to get highlighting
|
//construct a Solr query using aggregated terms to get highlighting
|
||||||
//the query is executed later on demand
|
//the query is executed later on demand
|
||||||
StringBuilder highlightQuery = new StringBuilder();
|
|
||||||
|
|
||||||
if (queryResults.getKeywords().size() == 1) {
|
if (queryResults.getKeywords().size() == 1) {
|
||||||
//simple case, no need to process subqueries and do special escaping
|
//simple case, no need to process subqueries and do special escaping
|
||||||
Keyword term = queryResults.getKeywords().iterator().next();
|
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 {
|
} else {
|
||||||
//find terms for this content hit
|
//find terms for this content hit
|
||||||
List<String> hitTerms = new ArrayList<>();
|
List<String> hitTerms = new ArrayList<>();
|
||||||
@ -276,26 +277,35 @@ class KeywordSearchResultFactory extends ChildFactory<KeyValueQueryContent> {
|
|||||||
int curTerm = 0;
|
int curTerm = 0;
|
||||||
for (String term : hitTerms) {
|
for (String term : hitTerms) {
|
||||||
//escape subqueries, they shouldn't be escaped again later
|
//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);
|
/*final String termS = KeywordSearchUtil.escapeLuceneQuery(term);
|
||||||
highlightQuery.append("\"");
|
highlightQuery.append("\"");
|
||||||
highlightQuery.append(termS);
|
highlightQuery.append(termS);
|
||||||
highlightQuery.append("\"");*/
|
highlightQuery.append("\"");*/
|
||||||
highlightQuery.append(term); // ELDEBUG
|
|
||||||
|
//highlightQuery.append(term); // ELDEBUG
|
||||||
if (lastTerm != curTerm) {
|
if (lastTerm != curTerm) {
|
||||||
highlightQuery.append(" "); //acts as OR ||
|
highlightQuery.append(" "); //acts as OR ||
|
||||||
//force HIGHLIGHT_FIELD_REGEX index and stored content
|
//force HIGHLIGHT_FIELD_REGEX index and stored content
|
||||||
//in each term after first. First term taken care by HighlightedMatchesSource
|
//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;
|
++curTerm;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//String highlightQueryEscaped = KeywordSearchUtil.escapeLuceneQuery(highlightQuery.toString());
|
//String highlightQueryEscaped = KeywordSearchUtil.escapeLuceneQuery(highlightQuery.toString());
|
||||||
highlightQueryEscaped = highlightQuery.toString();
|
|
||||||
|
//highlightQueryEscaped = highlightQuery.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
return highlightQueryEscaped;
|
return highlightQuery.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
x
Reference in New Issue
Block a user