[ 
https://issues.apache.org/jira/browse/SOLR-16858?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Joel Bernstein updated SOLR-16858:
----------------------------------
    Description: 
The KnnQParser is parsing the filter query which limits the rows considered by 
the vector query with following method:

{code:java}
private Query getFilterQuery() throws SolrException, SyntaxError {
    boolean isSubQuery = recurseCount != 0;
    if (!isFilter() && !isSubQuery) {
      String[] filterQueries = req.getParams().getParams(CommonParams.FQ);
      if (filterQueries != null && filterQueries.length != 0) {
        try {
          List<Query> filters = QueryUtils.parseFilterQueries(req);
          SolrIndexSearcher.ProcessedFilter processedFilter =
              req.getSearcher().getProcessedFilter(filters);
          return processedFilter.filter;
        } catch (IOException e) {
          throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
        }
      }
    }
    return null;
  }
{code}

This is pulling all filter queries from the main query parameters and using 
them to limit the vector query. This is the automatic behavior of the 
KnnQParser.

There are cases where you may want to selectively apply different filters. One 
such case is SOLR-16857 which involves reRanking a collapsed query.

Overriding the default filter behavior could be done by adding an "fq" local 
parameter to the KnnQParser which would override the default filtering behavior.

{code:java}
{!knn f=vector topK=10 fq=$kfq}[...]&kfq=myquery
{code}








  was:
The KnnQParser is parsing the filter query which limits the rows considered by 
the vector query by doing this:

{code:java}
private Query getFilterQuery() throws SolrException, SyntaxError {
    boolean isSubQuery = recurseCount != 0;
    if (!isFilter() && !isSubQuery) {
      String[] filterQueries = req.getParams().getParams(CommonParams.FQ);
      if (filterQueries != null && filterQueries.length != 0) {
        try {
          List<Query> filters = QueryUtils.parseFilterQueries(req);
          SolrIndexSearcher.ProcessedFilter processedFilter =
              req.getSearcher().getProcessedFilter(filters);
          return processedFilter.filter;
        } catch (IOException e) {
          throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
        }
      }
    }
    return null;
  }
{code}

This is pulling all filter queries from the main query parameters and using 
them to limit the vector query. This is the automatic behavior of the 
KnnQParser.

There are cases where you may want to selectively apply different filters. One 
such case is SOLR-16857 which involves reRanking a collapsed query.

Overriding the default filter behavior could be done by adding an "fq" local 
parameter to the KnnQParser which would override the default filtering behavior.

{code:java}
{!knn f=vector topK=10 fq=$kfq}[...]&kfq=myquery
{code}









> Allow KnnQParser to selectively apply filters
> ---------------------------------------------
>
>                 Key: SOLR-16858
>                 URL: https://issues.apache.org/jira/browse/SOLR-16858
>             Project: Solr
>          Issue Type: Bug
>      Security Level: Public(Default Security Level. Issues are Public) 
>            Reporter: Joel Bernstein
>            Assignee: Joel Bernstein
>            Priority: Major
>
> The KnnQParser is parsing the filter query which limits the rows considered 
> by the vector query with following method:
> {code:java}
> private Query getFilterQuery() throws SolrException, SyntaxError {
>     boolean isSubQuery = recurseCount != 0;
>     if (!isFilter() && !isSubQuery) {
>       String[] filterQueries = req.getParams().getParams(CommonParams.FQ);
>       if (filterQueries != null && filterQueries.length != 0) {
>         try {
>           List<Query> filters = QueryUtils.parseFilterQueries(req);
>           SolrIndexSearcher.ProcessedFilter processedFilter =
>               req.getSearcher().getProcessedFilter(filters);
>           return processedFilter.filter;
>         } catch (IOException e) {
>           throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
>         }
>       }
>     }
>     return null;
>   }
> {code}
> This is pulling all filter queries from the main query parameters and using 
> them to limit the vector query. This is the automatic behavior of the 
> KnnQParser.
> There are cases where you may want to selectively apply different filters. 
> One such case is SOLR-16857 which involves reRanking a collapsed query.
> Overriding the default filter behavior could be done by adding an "fq" local 
> parameter to the KnnQParser which would override the default filtering 
> behavior.
> {code:java}
> {!knn f=vector topK=10 fq=$kfq}[...]&kfq=myquery
> {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@solr.apache.org
For additional commands, e-mail: issues-h...@solr.apache.org

Reply via email to