Browse Source

FullTextSearch performance improvement

pull/3246/head
Andrii Shvaika 6 years ago
parent
commit
eef092424a
  1. 12
      dao/src/main/java/org/thingsboard/server/dao/sql/query/DefaultEntityQueryRepository.java

12
dao/src/main/java/org/thingsboard/server/dao/sql/query/DefaultEntityQueryRepository.java

@ -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 "";
} }

Loading…
Cancel
Save