Browse Source

fix #2371 use match_phrase_prefix query

Shinsuke Sugaya 5 years ago
parent
commit
74fd6db28b
1 changed files with 8 additions and 4 deletions
  1. 8 4
      src/main/java/org/codelibs/fess/helper/QueryHelper.java

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

@@ -511,17 +511,21 @@ public class QueryHelper {
         final String field = getSearchField(context, prefixQuery.getField());
         final String field = getSearchField(context, prefixQuery.getField());
         if (Constants.DEFAULT_FIELD.equals(field)) {
         if (Constants.DEFAULT_FIELD.equals(field)) {
             context.addFieldLog(field, prefixQuery.getPrefix().text());
             context.addFieldLog(field, prefixQuery.getPrefix().text());
-            return buildDefaultQueryBuilder((f, b) -> QueryBuilders.prefixQuery(f, toLowercaseWildcard(prefixQuery.getPrefix().text()))
-                    .boost(b * boost));
+            return buildDefaultQueryBuilder((f, b) -> QueryBuilders.matchPhrasePrefixQuery(f,
+                    toLowercaseWildcard(prefixQuery.getPrefix().text())).boost(b * boost));
         } else if (isSearchField(field)) {
         } else if (isSearchField(field)) {
             context.addFieldLog(field, prefixQuery.getPrefix().text());
             context.addFieldLog(field, prefixQuery.getPrefix().text());
-            return QueryBuilders.prefixQuery(field, toLowercaseWildcard(prefixQuery.getPrefix().text())).boost(boost);
+            if (notAnalyzedFieldSet.contains(field)) {
+                return QueryBuilders.prefixQuery(field, toLowercaseWildcard(prefixQuery.getPrefix().text())).boost(boost);
+            } else {
+                return QueryBuilders.matchPhrasePrefixQuery(field, toLowercaseWildcard(prefixQuery.getPrefix().text())).boost(boost);
+            }
         } else {
         } else {
             final String query = prefixQuery.getPrefix().toString();
             final String query = prefixQuery.getPrefix().toString();
             final String origQuery = toLowercaseWildcard(query);
             final String origQuery = toLowercaseWildcard(query);
             context.addFieldLog(Constants.DEFAULT_FIELD, query);
             context.addFieldLog(Constants.DEFAULT_FIELD, query);
             context.addHighlightedQuery(origQuery);
             context.addHighlightedQuery(origQuery);
-            return buildDefaultQueryBuilder((f, b) -> QueryBuilders.prefixQuery(f, origQuery).boost(b * boost));
+            return buildDefaultQueryBuilder((f, b) -> QueryBuilders.matchPhrasePrefixQuery(f, origQuery).boost(b * boost));
         }
         }
     }
     }