|
|
@@ -140,6 +140,23 @@ public abstract class AbstractOperationHolderConverter <REQUEST_TYPE, QUERY_TYPE
|
|
|
return query;
|
|
|
}
|
|
|
|
|
|
+ public SolrQuery addIncludeFieldValues(SolrQuery query, String fieldValuesMapStr) {
|
|
|
+ if (StringUtils.isNotEmpty(fieldValuesMapStr)) {
|
|
|
+ List<Map<String, String>> criterias = new Gson().fromJson(fieldValuesMapStr,
|
|
|
+ new TypeToken<List<HashMap<String, String>>>(){}.getType());
|
|
|
+ for (Map<String, String> criteriaMap : criterias) {
|
|
|
+ for (Map.Entry<String, String> fieldEntry : criteriaMap.entrySet()) {
|
|
|
+ if (fieldEntry.getKey().equalsIgnoreCase(LOG_MESSAGE)) {
|
|
|
+ addLogMessageFilter(query, fieldEntry.getValue(), false);
|
|
|
+ } else {
|
|
|
+ query.addFilterQuery(String.format("%s:%s", fieldEntry.getKey(), escapeNonLogMessageField(fieldEntry)));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return query;
|
|
|
+ }
|
|
|
+
|
|
|
public Query addExcludeFieldValues(Query query, String fieldValuesMapStr) {
|
|
|
if (StringUtils.isNotEmpty(fieldValuesMapStr)) {
|
|
|
List<Map<String, String>> criterias = new Gson().fromJson(fieldValuesMapStr,
|
|
|
@@ -157,6 +174,23 @@ public abstract class AbstractOperationHolderConverter <REQUEST_TYPE, QUERY_TYPE
|
|
|
return query;
|
|
|
}
|
|
|
|
|
|
+ public SolrQuery addExcludeFieldValues(SolrQuery query, String fieldValuesMapStr) {
|
|
|
+ if (StringUtils.isNotEmpty(fieldValuesMapStr)) {
|
|
|
+ List<Map<String, String>> criterias = new Gson().fromJson(fieldValuesMapStr,
|
|
|
+ new TypeToken<List<HashMap<String, String>>>(){}.getType());
|
|
|
+ for (Map<String, String> criteriaMap : criterias) {
|
|
|
+ for (Map.Entry<String, String> fieldEntry : criteriaMap.entrySet()) {
|
|
|
+ if (fieldEntry.getKey().equalsIgnoreCase(LOG_MESSAGE)) {
|
|
|
+ addLogMessageFilter(query, fieldEntry.getValue(), true);
|
|
|
+ } else {
|
|
|
+ query.addFilterQuery(String.format("-%s:%s", fieldEntry.getKey(), escapeNonLogMessageField(fieldEntry)));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return query;
|
|
|
+ }
|
|
|
+
|
|
|
public SolrQuery addListFilterToSolrQuery(SolrQuery solrQuery, String fieldName, String fieldValue) {
|
|
|
return SolrUtil.addListFilterToSolrQuery(solrQuery, fieldName, fieldValue);
|
|
|
}
|
|
|
@@ -182,6 +216,26 @@ public abstract class AbstractOperationHolderConverter <REQUEST_TYPE, QUERY_TYPE
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private void addLogMessageFilter(SolrQuery query, String value, boolean negate) {
|
|
|
+ StrTokenizer tokenizer = new StrTokenizer(value, ' ', '"');
|
|
|
+ String negateToken = negate ? "-" : "";
|
|
|
+ for (String token : tokenizer.getTokenArray()) {
|
|
|
+ token = token.trim();
|
|
|
+ if (token.contains(" ") || !token.startsWith("*") && !token.endsWith("*")) {
|
|
|
+ query.addFilterQuery(String.format("%s%s:%s", negateToken, LOG_MESSAGE, SolrUtil.escapeQueryChars(token)));
|
|
|
+ } else if (token.startsWith("*") && token.endsWith("*")) {
|
|
|
+ String plainToken = StringUtils.substring(token, 1, -1);
|
|
|
+ query.addFilterQuery(String.format("%s%s:%s", negateToken, LOG_MESSAGE, SolrUtil.escapeQueryChars(plainToken)));
|
|
|
+ } else if (token.startsWith("*") && !token.endsWith("*")) {
|
|
|
+ String plainToken = StringUtils.substring(token, 1);
|
|
|
+ query.addFilterQuery(String.format("%s%s:%s", negateToken, LOG_MESSAGE, SolrUtil.escapeQueryChars(plainToken)));
|
|
|
+ } else if (!token.startsWith("*") && token.endsWith("*")) {
|
|
|
+ String plainToken = StringUtils.substring(token, 0, -1);
|
|
|
+ query.addFilterQuery(String.format("%s%s:%s", negateToken, LOG_MESSAGE, SolrUtil.escapeQueryChars(plainToken)));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private String escapeNonLogMessageField(Map.Entry<String, String> fieldEntry) {
|
|
|
Map<String, String> schemaFieldNameMap = solrSchemaFieldDao.getSchemaFieldNameMap(getLogType());
|
|
|
Map<String, String> schemaFieldTypeMap = solrSchemaFieldDao.getSchemaFieldTypeMap(getLogType());
|