Hi Otis,

I have fixed it by assigning the value to rb same as assigned to sreq:

rb.shards = shards.toString().split(",");


not tested that fully yet, but distributed faceting works at least on my pc
_3 shards 1 router_ setup.

Dmitry


On Thu, Jun 16, 2011 at 4:53 PM, Dmitry Kan <dmitry....@gmail.com> wrote:

> Hi Otis,
>
> I followed your recommendation and decided to implement the
> SearchComponent::modifyRequest(ResponseBuilder rb, SearchComponent who,
> ShardRequest sreq) method, where the query routing happens. So far it is
> working OK for the non-facet search, this is good news. The bad news is that
> it fails on the facet search.
>
> This is how request modification happens:
>
> [code_snippet, SearchComponent::modifyRequest]
> SolrQueryRequest req_routed = rb.req;
> req_routed = routeRequest(req_routed);
> rb.req = req_routed;
> sreq.shards = shards.toString().split(",");
> [/code_snippet]
>
> where shards is StringBuilder, that accumulates the shards the request
> should go to. req_routed also contains the target shards. Those are set like
> this:
>
>
> [code_snippet, my function routeRequest(SolrQueryRequest req)]
> // could not find clone(), used ref reassignment
> SolrQueryRequest req_local = req;
> ModifiableSolrParams params = new
> ModifiableSolrParams(req_local.getParams());
> ...
> params.remove(ShardParams.SHARDS);
> params.set(ShardParams.SHARDS, getShardsParams(yearToQuarterMap));
> params.remove(ShardParams.IS_SHARD);
> params.set(ShardParams.IS_SHARD, true);
> req_local.setParams(params);
> ...
> return req_local;
> [/code_snippet]
>
> The NPE happens down the road during the facet search, in the
> FacetComponent::countFacets(), the cause of which is that OpenBitSet obs is
> null for shardNum=0.
>
> Do you have any idea why this happens, should some other field
> of ResponseBuilder, SearchComponent or ShardRequest be changed?
>
> BTW, I have tried to call FacetInfo::parse method inside
> FacetComponent::modifyRequest() and countFacets(). Where do
> the fi.facets.values() get initiated, is there some method to call?
>
> Thanks,
> Dmitry
>
> On Fri, Jun 3, 2011 at 8:00 PM, Otis Gospodnetic <
> otis_gospodne...@yahoo.com> wrote:
>
>> Nah, if you can quickly figure out which shard a given query maps to, then
>> all
>> this component needs to do is stick the appropriate shards param value in
>> the
>> request and let the request pass through to the other SearchComponents in
>> the
>> chain,  including QueryComponent, which will know what to do with the
>> shards
>> param.
>>
>> Otis
>> ----
>> Sematext :: http://sematext.com/ :: Solr - Lucene - Nutch
>> Lucene ecosystem search :: http://search-lucene.com/
>>
>>
>>
>> ----- Original Message ----
>> > From: Dmitry Kan <dmitry....@gmail.com>
>> > To: solr-user@lucene.apache.org
>> > Sent: Fri, June 3, 2011 12:56:15 PM
>> > Subject: Re: query routing with shards
>> >
>> > Hi Otis,
>> >
>> > Thanks! This sounds promising. This custom implementation, will  it hurt
>> in
>> > any way the stability of the front end SOLR? After implementing  it, can
>> I
>> > run some tests to verify the stability /  performance?
>> >
>> > Dmitry
>> > On Fri, Jun 3, 2011 at 4:49 PM, Otis Gospodnetic  <
>> otis_gospodne...@yahoo.com
>> > >  wrote:
>> >
>> > > Hi Dmitry,
>> > >
>> > > Yes, you could also implement your  own custom SearchComponent.  In
>> this
>> > > component you could grab the  query param, examine the query value,
>> and
>> > > based on
>> > > that add the  shards URL param with appropriate value, so that when
>> the
>> > >  regular
>> > > QueryComponent grabs stuff from the request, it has the correct  shard
>> in
>> > > there
>> > > already.
>> > >
>> > > Otis
>> > >  ----
>> > > Sematext :: http://sematext.com/ :: Solr - Lucene - Nutch
>> > > Lucene ecosystem  search :: http://search-lucene.com/
>> > >
>> > >
>> > >
>> > > ----- Original  Message ----
>> > > > From: Dmitry Kan <dmitry....@gmail.com>
>> > > > To: solr-user@lucene.apache.org
>> > >   > Sent: Fri, June 3, 2011 2:47:00 AM
>> > > > Subject: Re: query routing  with shards
>> > > >
>> > > > Hi Otis,
>> > > >
>> > > > I  merely followed on the gmail's suggestion to include other
>>  people
>> into
>> > > the
>> > > > recipients list, Yonik was the first one :) I  won't do it  next
>> time.
>> > > >
>> > > > Thanks for a rapid reply.  The reason for doing this query  routing
>> is
>> > > that we
>> > > >  abstract the distributed SOLR from the client code for  security
>>  reasons
>> > > > (that is, we don't want to expose the entire shard farm  to  the
>> world,
>> > > but
>> > > > only the frontend SOLR) and for  better decoupling.
>> > > >
>> > > > Is  it possible to implement a  plugin to SOLR that would map
>> queries  to
>> > > > shards?
>> > >  >
>> > > > We have other choices too, they'll take quite some time,   that's
>> why I
>> > > > decided to quickly ask, if I was missing something  from the SOLR
>>  main
>> > > > components design and  configuration.
>> > > >
>> > > > Dmitry
>> > > >
>> > > > On  Fri, Jun 3,  2011 at 8:25 AM, Otis Gospodnetic <
>> > > otis_gospodne...@yahoo.com
>> > >  > >  wrote:
>> > > >
>> > > > > Hi Dmitry (you may not  want to additionally copy Yonik, he's
>> > >  subscribed to
>> > > >  > this
>> > > > > list, too)
>> > > > >
>> > > >  >
>> > > > > It sounds  like you have the knowledge of which  query maps to
>> which
>> > > shard.
>> > > > >   If
>> > > > >  so, why not control/change the value of "shards" param in the
>>  request
>> > >  to
>> > > > > your
>> > > > > front-end Solr  (aka distributed request dispatcher)  within your
>> app,
>> > >  which
>> > > > > is
>> > > > > the one calling Solr?
>> > > >  >
>> > > > >  Otis
>> > > > > ----
>> > > > >  Sematext :: http://sematext.com/ :: Solr - Lucene - Nutch
>> > > > >  Lucene  ecosystem search :: http://search-lucene.com/
>> > > > >
>> > > >  >
>> > > > >
>> > > > > ----- Original  Message  ----
>> > > > > > From: Dmitry Kan <dmitry....@gmail.com>
>> > > >  > > To: solr-user@lucene.apache.org; yo...@lucidimagination.com
>> > >  > >  > Sent: Thu, June 2, 2011 7:00:53 AM
>> > > > > >  Subject: query routing with  shards
>> > > > > >
>> > > >  > > Hello all,
>> > > > > >
>> > > > > > We have   currently several pretty fat logically isolated shards
>>  with
>> > >  the
>> > > > >  same
>> > > > > > schema / solrconfig  (indices are separate). We currently  have
>>  one
>> > > single
>> > >  > > > front end SOLR (1.4) for the client code  calls. Since a
>>  client
>> code
>> > > > > query
>> > > > > > usually hits  only  one shard, we are considering making a smart
>> > >   routing
>> > > > > of
>> > > > >  > queries to the shards  they map to. Can you please give some
>> > >  pointers  as
>> > >  > > to
>> > > > > > what would be an optimal way to achieve such  a  routing inside
>>  the
>> > > front
>> > > > > end
>> > >  > > > solr? Is there a way to  configure mapping inside the
>> solrconfig?
>> > > > > >
>> > > > > >  Thanks.
>> > >  > > >
>> > > > > > --
>> > > > > > Regards,
>> > >  > > >
>> > > > >  > Dmitry Kan
>> > > > >  >
>> > > > >
>> > > >
>> > > >
>> > > >
>> > > >  --
>> > > > Regards,
>> > > >
>> > > > Dmitry Kan
>> > >  >
>> > >
>> >
>> >
>> >
>> > --
>> > Regards,
>> >
>> > Dmitry Kan
>> >
>>
>
>
>


-- 
Regards,

Dmitry Kan

Reply via email to