ソースを参照

fix #2184 OR query with full-width space

Shinsuke Sugaya 6 年 前
コミット
68690b7782

+ 11 - 0
src/main/java/org/codelibs/fess/mylasta/direction/FessProp.java

@@ -109,6 +109,8 @@ public interface FessProp {
 
     String CRAWLER_DOCUMENT_SPACE_CHARS = "crawlerDocumentSpaceChars";
 
+    String CRAWLER_DOCUMENT_SPACES = "crawlerDocumentSpaces";
+
     String CRAWLER_DOCUMENT_FULLSTOP_CHARS = "crawlerDocumentFullstopChars";
 
     String INDEX_ADMIN_ARRAY_FIELD_SET = "indexAdminArrayFieldSet";
@@ -1460,6 +1462,15 @@ public interface FessProp {
         return getCrawlerDocumentCharsAsArray(CRAWLER_DOCUMENT_SPACE_CHARS, getCrawlerDocumentSpaceChars());
     }
 
+    default String[] getCrawlerDocumentSpaces() {
+        String[] spaces = (String[]) propMap.get(CRAWLER_DOCUMENT_SPACES);
+        if (spaces == null) {
+            spaces = Arrays.stream(getCrawlerDocumentSpaceCharsAsArray()).mapToObj(Character::toString).toArray(n -> new String[n]);
+            propMap.put(CRAWLER_DOCUMENT_SPACES, spaces);
+        }
+        return spaces;
+    }
+
     default int[] getCrawlerDocumentCharsAsArray(final String key, final String spaceStr) {
         int[] spaceChars = (int[]) propMap.get(key);
         if (spaceChars == null) {

+ 9 - 3
src/main/java/org/codelibs/fess/util/QueryStringBuilder.java

@@ -28,10 +28,12 @@ import org.codelibs.fess.mylasta.direction.FessConfig;
 
 public class QueryStringBuilder {
 
-    private static final String OR_ALT = "||";
+    private static final String OR_ALT = " || ";
 
     private static final String OR = " OR ";
 
+    private static final String SPACE = " ";
+
     private SearchRequestParams params;
 
     protected String quote(final String value) {
@@ -81,13 +83,17 @@ public class QueryStringBuilder {
         return queryBuf.toString().trim();
     }
 
-    protected void appendQuery(final StringBuilder queryBuf, final String q) {
+    protected void appendQuery(final StringBuilder queryBuf, final String query) {
+        String q = query;
+        for (final String s : ComponentUtil.getFessConfig().getCrawlerDocumentSpaces()) {
+            q = q.replace(s, SPACE);
+        }
         final boolean exists = q.indexOf(OR) != -1 || q.indexOf(OR_ALT) != -1;
         queryBuf.append(' ');
         if (exists) {
             queryBuf.append('(');
         }
-        queryBuf.append(q);
+        queryBuf.append(query);
         if (exists) {
             queryBuf.append(')');
         }