I'm trying to verify that a very simple custom post filter will work on a
sharded collection. So far it doesn't. Here are the search results on my
single shard test collection:

{
  "responseHeader": {
    "status": 0,
    "QTime": 17
  },
  "thecountis": "946028",
  "myvar": "hello",
  "response": {
    "numFound": 946028,
    "start": 0,
    "docs": [
...]
}

When I run against a two shard collection (same data set) it's as though the
post filter doesn't exist. The results don't include my additions to the
response:

{
  "responseHeader": {
    "status": 0,
    "QTime": 17
  },
  "response": {
    "numFound": 946028,
    "start": 0,
    "docs": [
...]
}

Here's the solconfig.xml:

...
<queryParser name="TedFilter" class="...TedPlugin" />
   <requestHandler name="/ted" class="solr.SearchHandler">
           <lst name="appends">
                        <str name="fq">{!TedFilter myvar=hello}</str>
                </lst>
   </requestHandler>
...

And here's the simplest plugin I could write:

public class TedPlugin extends QParserPlugin {
        @Override
        public void init(NamedList arg0) {
        }

        @Override
        public QParser createParser(String arg0, final SolrParams arg1, final
SolrParams arg2, final SolrQueryRequest arg3) {
                return new QParser(arg0, arg1, arg2, arg3) {

                        @Override
                        public Query parse() throws SyntaxError {
                                return new TedQuery(arg1, arg2, arg3);
                        }
                };
        }
}

public class TedQuery extends AnalyticsQuery {
        private final String myvar;

        TedQuery(SolrParams localParams, SolrParams params, SolrQueryRequest 
req) {
                myvar = localParams.get("myvar");
        }

        @Override
        public DelegatingCollector getAnalyticsCollector(ResponseBuilder rb,
IndexSearcher searcher) {
                return new TedCollector(myvar, rb);
        }

        @Override
        public boolean equals(Object o) {
                if (o instanceof TedQuery) {
                        TedQuery tq = (TedQuery) o;
                        return Objects.equals(this.myvar, tq.myvar);
                }
                return false;
        }

        @Override
        public int hashCode() {
                return myvar == null ? 1 : myvar.hashCode();
        }


        class TedCollector extends DelegatingCollector {
                ResponseBuilder rb;
                int count;
                String myvar;

                public TedCollector(String myvar, ResponseBuilder rb) {
                        this.rb = rb;
                        this.myvar = myvar;
                }

                @Override
                public void collect(int doc) throws IOException {
                        count++;
                        super.collect(doc);
                }

                @Override
                public void finish() throws IOException {
                        rb.rsp.add("thecountis", String.valueOf(count));
                        rb.rsp.add("myvar", myvar);

                        if (super.delegate instanceof DelegatingCollector) {
                                ((DelegatingCollector) super.delegate).finish();
                        }
                }
        }
}

What am I doing wrong? Thanks!
Ted
v5.2.1 SolrCloud mode



--
View this message in context: 
http://lucene.472066.n3.nabble.com/QParsePlugin-not-working-on-sharded-collection-tp4290249.html
Sent from the Solr - User mailing list archive at Nabble.com.

Reply via email to