dsmiley commented on code in PR #1154: URL: https://github.com/apache/solr/pull/1154#discussion_r1014484618
########## solr/core/src/java/org/apache/solr/handler/component/QueryElevationComponent.java: ########## @@ -553,6 +560,82 @@ private void setQuery(ResponseBuilder rb, Elevation elevation) { } } + /** + * Updates any filters that have been tagged for exclusion. Filters can be tagged for exclusion + * via the syntax fq={!tag=t1}field1:value1&elevate.excludeTags=t1 This method modifies each + * "excluded" filter so that it becomes a boolean OR of the original filter with an "include + * query" that matches the elevated documents by their IDs. To be clear, the "excluded" filters + * are not ignored entirely, but rather broadened so that the elevated documents are allowed + * through. + */ + private void setFilters(ResponseBuilder rb, Elevation elevation) { + SolrParams params = rb.req.getParams(); + + String tagStr = params.get(QueryElevationParams.ELEVATE_EXCLUDE_TAGS); + if (StringUtils.isEmpty(tagStr)) { + // the parameter that specifies tags for exclusion was not provided or had no value + return; + } + + List<String> excludeTags = StrUtils.splitSmart(tagStr, ','); + excludeTags.removeIf(s -> StringUtils.isBlank(s)); + if (excludeTags.isEmpty()) { + // the parameter that specifies tags for exclusion was provided but the tag names were blank + return; + } + + List<Query> filters = rb.getFilters(); + if (filters == null || filters.isEmpty()) { + // no filters were provided + return; + } + + Map<?, ?> tagMap = (Map<?, ?>) rb.req.getContext().get("tags"); + if (tagMap == null) { + // no filters were tagged + return; + } + + // TODO: this code is copied from FacetProcessor#handleFilterExclusions() + // duplication could be avoided by placing this code in a common utility method, perhaps in + // QueryUtils Review Comment: Maybe `ResponseBuilder`. There is no great place because we don't capture this feature into any one class. RB is mostly a POJO so this method would seem quite random there. But not bad. I support that. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: issues-unsubscr...@solr.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@solr.apache.org For additional commands, e-mail: issues-h...@solr.apache.org