Browse Source

fix #613 add lowercaseWildcard

Shinsuke Sugaya 9 years ago
parent
commit
977da456bd
1 changed files with 26 additions and 8 deletions
  1. 26 8
      src/main/java/org/codelibs/fess/helper/QueryHelper.java

+ 26 - 8
src/main/java/org/codelibs/fess/helper/QueryHelper.java

@@ -21,6 +21,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
@@ -114,6 +115,8 @@ public class QueryHelper {
 
     protected String additionalQuery;
 
+    protected boolean lowercaseWildcard = true;
+
     protected long timeAllowed = -1;
 
     protected Map<String, String[]> requestParameterMap = new HashMap<>();
@@ -307,17 +310,26 @@ public class QueryHelper {
         return boolQuery;
     }
 
+    protected String toLowercaseWildcard(final String value) {
+        if (lowercaseWildcard) {
+            return value.toLowerCase(Locale.ROOT);
+        }
+        return value;
+    }
+
     protected QueryBuilder convertWildcardQuery(final QueryContext context, final WildcardQuery wildcardQuery, final float boost) {
         final String field = wildcardQuery.getField();
         if (Constants.DEFAULT_FIELD.equals(field)) {
             context.addFieldLog(field, wildcardQuery.getTerm().text());
-            return buildDefaultQueryBuilder((f, b) -> QueryBuilders.wildcardQuery(f, wildcardQuery.getTerm().text()).boost(b * boost));
+            return buildDefaultQueryBuilder((f, b) -> QueryBuilders.wildcardQuery(f, toLowercaseWildcard(wildcardQuery.getTerm().text()))
+                    .boost(b * boost));
         } else if (isSearchField(field)) {
             context.addFieldLog(field, wildcardQuery.getTerm().text());
-            return QueryBuilders.wildcardQuery(field, wildcardQuery.getTerm().text()).boost(boost);
+            return QueryBuilders.wildcardQuery(field, toLowercaseWildcard(wildcardQuery.getTerm().text())).boost(boost);
         } else {
-            final String origQuery = wildcardQuery.getTerm().toString();
-            context.addFieldLog(Constants.DEFAULT_FIELD, origQuery);
+            final String query = wildcardQuery.getTerm().toString();
+            final String origQuery = toLowercaseWildcard(query);
+            context.addFieldLog(Constants.DEFAULT_FIELD, query);
             context.addHighlightedQuery(origQuery);
             return buildDefaultQueryBuilder((f, b) -> QueryBuilders.wildcardQuery(f, origQuery).boost(b * boost));
         }
@@ -327,13 +339,15 @@ public class QueryHelper {
         final String field = prefixQuery.getField();
         if (Constants.DEFAULT_FIELD.equals(field)) {
             context.addFieldLog(field, prefixQuery.getPrefix().text());
-            return buildDefaultQueryBuilder((f, b) -> QueryBuilders.prefixQuery(f, prefixQuery.getPrefix().text()).boost(b * boost));
+            return buildDefaultQueryBuilder((f, b) -> QueryBuilders.prefixQuery(f, toLowercaseWildcard(prefixQuery.getPrefix().text()))
+                    .boost(b * boost));
         } else if (isSearchField(field)) {
             context.addFieldLog(field, prefixQuery.getPrefix().text());
-            return QueryBuilders.prefixQuery(field, prefixQuery.getPrefix().text()).boost(boost);
+            return QueryBuilders.prefixQuery(field, toLowercaseWildcard(prefixQuery.getPrefix().text())).boost(boost);
         } else {
-            final String origQuery = prefixQuery.getPrefix().toString();
-            context.addFieldLog(Constants.DEFAULT_FIELD, origQuery);
+            final String query = prefixQuery.getPrefix().toString();
+            final String origQuery = toLowercaseWildcard(query);
+            context.addFieldLog(Constants.DEFAULT_FIELD, query);
             context.addHighlightedQuery(origQuery);
             return buildDefaultQueryBuilder((f, b) -> QueryBuilders.prefixQuery(f, origQuery).boost(b * boost));
         }
@@ -776,4 +790,8 @@ public class QueryHelper {
         return UUID.randomUUID().toString().replace("-", StringUtil.EMPTY);
     }
 
+    public void setLowercaseWildcard(boolean lowercaseWildcard) {
+        this.lowercaseWildcard = lowercaseWildcard;
+    }
+
 }