FullTextSearch performance improvement

This commit is contained in:
Andrii Shvaika 2020-08-05 16:05:54 +03:00
parent b0102f523f
commit eef092424a

View File

@ -550,14 +550,10 @@ public class DefaultEntityQueryRepository implements EntityQueryRepository {
private String buildTextSearchQuery(QueryContext ctx, List<EntityKeyMapping> selectionMapping, String searchText) { private String buildTextSearchQuery(QueryContext ctx, List<EntityKeyMapping> selectionMapping, String searchText) {
if (!StringUtils.isEmpty(searchText) && !selectionMapping.isEmpty()) { if (!StringUtils.isEmpty(searchText) && !selectionMapping.isEmpty()) {
String lowerSearchText = searchText.toLowerCase() + "%"; String lowerSearchText = "%" + searchText.toLowerCase() + "%";
List<String> searchPredicates = selectionMapping.stream().map(mapping -> { ctx.addStringParameter("lowerSearchTextParam", lowerSearchText);
String paramName = mapping.getValueAlias() + "_lowerSearchText"; List<String> searchAliases = selectionMapping.stream().map(EntityKeyMapping::getValueAlias).collect(Collectors.toList());
ctx.addStringParameter(paramName, lowerSearchText); return String.format(" WHERE LOWER(CONCAT(%s)) LIKE :%s", String.join(" , ", searchAliases), "lowerSearchTextParam");
return String.format("LOWER(%s) LIKE concat('%%', :%s, '%%')", mapping.getValueAlias(), paramName);
}
).collect(Collectors.toList());
return String.format(" WHERE %s", String.join(" or ", searchPredicates));
} else { } else {
return ""; return "";
} }