fix #2184 OR query with full-width space

This commit is contained in:
Shinsuke Sugaya 2019-07-18 18:14:28 +09:00
parent f6d71f505f
commit 68690b7782
2 changed files with 20 additions and 3 deletions

View file

@ -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) {

View file

@ -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(')');
}