Hi,

in the TermsComponent.java's, createShardQuery, the motive to specify
terms.limit to -1 is clearly specified in java comment

but we have a usecase where have thousands  of terms and we want each core
to return only the value specfied by terms.limit.

can we have two flavours of TermsComponent where in
1. we specify terms.limit = -1 (which is the current one)
2. we honour terms.limit passed by the caller. something like below


public class LimitBasedTermsComponent extends TermsComponent {

    @Override
    public int distributedProcess(ResponseBuilder rb) throws IOException {
        if (!rb.doTerms) {
            return ResponseBuilder.STAGE_DONE;
        }

        if (rb.stage == ResponseBuilder.STAGE_EXECUTE_QUERY) {
            TermsHelper th = rb._termsHelper;
            if (th == null) {
                th = rb._termsHelper = new TermsHelper();
                th.init(rb.req.getParams());
            }
            ShardRequest sreq = createShardQuery(rb.req.getParams());
            rb.addRequest(this, sreq);
        }

        if (rb.stage < ResponseBuilder.STAGE_EXECUTE_QUERY) {
            return ResponseBuilder.STAGE_EXECUTE_QUERY;
        } else {
            return ResponseBuilder.STAGE_DONE;
        }
    }


    private ShardRequest createShardQuery(SolrParams params) {
        ShardRequest sreq = new ShardRequest();
        sreq.purpose = ShardRequest.PURPOSE_GET_TERMS;

        // base shard request on original parameters
        sreq.params = new ModifiableSolrParams(params);

        // if TermsParams.TERMS_LIMIT is present in the params, use
the value, else default it to 10
        sreq.params.remove(TermsParams.TERMS_MAXCOUNT);
        sreq.params.remove(TermsParams.TERMS_MINCOUNT);
        sreq.params.set(TermsParams.TERMS_LIMIT,
params.getInt(TermsParams.TERMS_LIMIT, 10));
        sreq.params.set(TermsParams.TERMS_SORT, TermsParams.TERMS_SORT_INDEX);

        return sreq;
    }



Thanks,
Radhakrishnan D

Reply via email to