diff --git a/dictionaryweights/src/main/java/edu/harvard/dbmi/avillach/dictionaryweights/WeightUpdateCreator.java b/dictionaryweights/src/main/java/edu/harvard/dbmi/avillach/dictionaryweights/WeightUpdateCreator.java index 1de1d56..f3ccafc 100644 --- a/dictionaryweights/src/main/java/edu/harvard/dbmi/avillach/dictionaryweights/WeightUpdateCreator.java +++ b/dictionaryweights/src/main/java/edu/harvard/dbmi/avillach/dictionaryweights/WeightUpdateCreator.java @@ -22,7 +22,7 @@ public String createUpdate(List weights) { .collect(Collectors.joining(", ' ',\n ")); return """ UPDATE concept_node - SET SEARCHABLE_FIELDS = to_tsvector(data_table.search_str) + SET SEARCHABLE_FIELDS = to_tsvector(replace(data_table.search_str, '_', '/')) FROM ( SELECT diff --git a/src/main/java/edu/harvard/dbmi/avillach/dictionary/facet/FilterPreProcessor.java b/src/main/java/edu/harvard/dbmi/avillach/dictionary/facet/FilterPreProcessor.java new file mode 100644 index 0000000..f2fc7dc --- /dev/null +++ b/src/main/java/edu/harvard/dbmi/avillach/dictionary/facet/FilterPreProcessor.java @@ -0,0 +1,49 @@ +package edu.harvard.dbmi.avillach.dictionary.facet; + +import edu.harvard.dbmi.avillach.dictionary.filter.Filter; +import org.springframework.core.MethodParameter; +import org.springframework.http.HttpInputMessage; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.servlet.mvc.method.annotation.RequestBodyAdvice; + +import java.io.IOException; +import java.lang.reflect.Type; + +@ControllerAdvice +public class FilterPreProcessor implements RequestBodyAdvice { + @Override + public boolean supports( + MethodParameter methodParameter, Type targetType, Class> converterType + ) { + return true; + } + + @Override + public HttpInputMessage beforeBodyRead( + HttpInputMessage inputMessage, MethodParameter parameter, Type targetType, + Class> converterType + ) throws IOException { + return inputMessage; + } + + @Override + public Object afterBodyRead( + Object body, HttpInputMessage inputMessage, MethodParameter parameter, + Type targetType, Class> converterType + ) { + if (body instanceof Filter filter && StringUtils.hasLength(filter.search())) { + return new Filter(filter.facets(), filter.search().replaceAll("_", "/")); + } + return body; + } + + @Override + public Object handleEmptyBody( + Object body, HttpInputMessage inputMessage, MethodParameter parameter, Type targetType, + Class> converterType + ) { + return body; + } +}