diff --git a/src/main/java/org/codelibs/fess/helper/ViewHelper.java b/src/main/java/org/codelibs/fess/helper/ViewHelper.java
index fce54f741..8d636301f 100644
--- a/src/main/java/org/codelibs/fess/helper/ViewHelper.java
+++ b/src/main/java/org/codelibs/fess/helper/ViewHelper.java
@@ -35,6 +35,7 @@ import java.util.function.Consumer;
import java.util.function.Function;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import java.util.stream.Collectors;
import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletRequest;
@@ -156,19 +157,15 @@ public class ViewHelper {
}
return getQuerySet().map(
querySet -> {
- String t = value;
- for (final String query : querySet) {
- final String target = LaFunctions.h(query);
- final Matcher matcher =
- Pattern.compile(target, Pattern.LITERAL | Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE).matcher(t);
- final StringBuffer buf = new StringBuffer(t.length() + 100);
- while (matcher.find()) {
- matcher.appendReplacement(buf, highlightTagPre + matcher.group(0) + highlightTagPost);
- }
- matcher.appendTail(buf);
- t = buf.toString();
+ final Matcher matcher =
+ Pattern.compile(querySet.stream().map(LaFunctions::h).map(Pattern::quote).collect(Collectors.joining("|")),
+ Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE).matcher(value);
+ final StringBuffer buf = new StringBuffer(value.length() + 100);
+ while (matcher.find()) {
+ matcher.appendReplacement(buf, highlightTagPre + matcher.group(0) + highlightTagPost);
}
- return t;
+ matcher.appendTail(buf);
+ return buf.toString();
}).orElse(value);
}
diff --git a/src/test/java/org/codelibs/fess/helper/ViewHelperTest.java b/src/test/java/org/codelibs/fess/helper/ViewHelperTest.java
index d2166006c..db35771ae 100644
--- a/src/test/java/org/codelibs/fess/helper/ViewHelperTest.java
+++ b/src/test/java/org/codelibs/fess/helper/ViewHelperTest.java
@@ -209,6 +209,10 @@ public class ViewHelperTest extends UnitFessTestCase {
text = "1ABC2";
queries = new String[] { "abc" };
assertEquals("1abc2", viewHelper.replaceHighlightQueries(text, queries));
+
+ text = "abc on exy";
+ queries = new String[] { "on" };
+ assertEquals("abc on exy", viewHelper.replaceHighlightQueries(text, queries));
}
public void test_escapeHighlight() {
@@ -324,5 +328,10 @@ public class ViewHelperTest extends UnitFessTestCase {
document.put("title", "111AaA222bbb");
assertEquals("111AaA222bbb", viewHelper.getContentTitle(document));
+
+ querySet.add("on");
+ document.put("title", "on 111 strong on aaaa");
+ assertEquals("on 111 strong on aaaa",
+ viewHelper.getContentTitle(document));
}
}