From eef092424abf9d0886606a470ed7cecd8d0a3b7c Mon Sep 17 00:00:00 2001 From: Andrii Shvaika Date: Wed, 5 Aug 2020 16:05:54 +0300 Subject: [PATCH] FullTextSearch performance improvement --- .../dao/sql/query/DefaultEntityQueryRepository.java | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/query/DefaultEntityQueryRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/query/DefaultEntityQueryRepository.java index 7e088f2016..83b7e752e8 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/query/DefaultEntityQueryRepository.java +++ b/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 selectionMapping, String searchText) { if (!StringUtils.isEmpty(searchText) && !selectionMapping.isEmpty()) { - String lowerSearchText = searchText.toLowerCase() + "%"; - List searchPredicates = selectionMapping.stream().map(mapping -> { - String paramName = mapping.getValueAlias() + "_lowerSearchText"; - ctx.addStringParameter(paramName, lowerSearchText); - return String.format("LOWER(%s) LIKE concat('%%', :%s, '%%')", mapping.getValueAlias(), paramName); - } - ).collect(Collectors.toList()); - return String.format(" WHERE %s", String.join(" or ", searchPredicates)); + String lowerSearchText = "%" + searchText.toLowerCase() + "%"; + ctx.addStringParameter("lowerSearchTextParam", lowerSearchText); + List searchAliases = selectionMapping.stream().map(EntityKeyMapping::getValueAlias).collect(Collectors.toList()); + return String.format(" WHERE LOWER(CONCAT(%s)) LIKE :%s", String.join(" , ", searchAliases), "lowerSearchTextParam"); } else { return ""; }