From 672ed828ff35be3564f3bc09b8bdbbe3886b3bc0 Mon Sep 17 00:00:00 2001 From: Juhi Agarwal Date: Fri, 29 Jul 2022 23:39:49 +0530 Subject: [PATCH] added the fix for fuzzy search --- .../search/processor/SearchProcessor.java | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/search-api/search-core/src/main/java/org/sunbird/search/processor/SearchProcessor.java b/search-api/search-core/src/main/java/org/sunbird/search/processor/SearchProcessor.java index 5d163638d..6b10382cc 100644 --- a/search-api/search-core/src/main/java/org/sunbird/search/processor/SearchProcessor.java +++ b/search-api/search-core/src/main/java/org/sunbird/search/processor/SearchProcessor.java @@ -320,7 +320,7 @@ private QueryBuilder prepareSearchQuery(SearchDTO searchDTO) { if (propertyName.equals("*")) { relevanceSort = true; propertyName = "all_fields"; - queryBuilder = getAllFieldsPropertyQuery(values); + queryBuilder = getAllFieldsPropertyQuery(values, searchDTO.isFuzzySearch()); boolQuery.must(queryBuilder); continue; } @@ -463,7 +463,7 @@ private QueryBuilder prepareFilteredSearchQuery(SearchDTO searchDTO) { relevanceSort = true; propertyName = "all_fields"; filterFunctionBuilder - .add(new FilterFunctionBuilder(getAllFieldsPropertyQuery(values), + .add(new FilterFunctionBuilder(getAllFieldsPropertyQuery(values, Boolean.FALSE), ScoreFunctionBuilders.weightFactorFunction(weightages.get("default_weightage")))); continue; } @@ -597,7 +597,7 @@ private float getweight(List querySearchFeilds, String propertyName) { * @param values * @return */ - private QueryBuilder getAllFieldsPropertyQuery(List values) { + private QueryBuilder getAllFieldsPropertyQuery(List values, Boolean fuzzy) { List queryFields = ElasticSearchUtil.getQuerySearchFields(); Map queryFieldsMap = new HashMap<>(); for (String field : queryFields) { @@ -608,9 +608,15 @@ private QueryBuilder getAllFieldsPropertyQuery(List values) { } BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery(); for (Object value : values) { - queryBuilder - .should(QueryBuilders.multiMatchQuery(value).fields(queryFieldsMap) - .operator(Operator.AND).type(Type.CROSS_FIELDS).lenient(true)); + if (fuzzy) { + queryBuilder + .should(QueryBuilders.multiMatchQuery(value).fields(queryFieldsMap) + .operator(Operator.AND).fuzziness("AUTO").lenient(true)); + } else { + queryBuilder + .should(QueryBuilders.multiMatchQuery(value).fields(queryFieldsMap) + .operator(Operator.AND).type(Type.CROSS_FIELDS).fuzzyTranspositions(false).lenient(true)); + } } return queryBuilder; @@ -769,10 +775,10 @@ private QueryBuilder getMustTermQuery(String propertyName, List values, for (Object value : values) { if (match) { queryBuilder.should( - QueryBuilders.matchQuery(propertyName, value)); + QueryBuilders.matchQuery(propertyName, value).fuzzyTranspositions(false)); } else { queryBuilder.mustNot( - QueryBuilders.matchQuery(propertyName, value)); + QueryBuilders.matchQuery(propertyName, value).fuzzyTranspositions(false)); } } @@ -935,7 +941,7 @@ private QueryBuilder getSearchQuery(SearchDTO searchDTO) { } private QueryBuilder getQuery(SearchDTO searchDTO) { - return searchDTO.isFuzzySearch() ? prepareFilteredSearchQuery(searchDTO) : prepareSearchQuery(searchDTO); + return prepareSearchQuery(searchDTO); }