@Override
  public void collect(int doc) throws IOException {
    docNumsByIds.put(context.reader().doc(doc).getField("id"), doc);
    // don't call delegate
  }

  @Override
  protected void doSetNextReader(LeafReaderContext context) throws
IOException {
     flush(); // strictly before the next segment
     super.doSetNextReader(context)
  }

  void flush(){
     Set<String> allowedIDs = callRedisToRetainAllowed(docNumsByIds.keys())
     docNumsByIds.keys().retainAll(allowedIDs )
     for(int docNum:docNumsByIds.values()) {
       delegate.collect(docNum);
     }
  }

  public void finish() throws IOException {
   flush();
    super.finish()
  }


On Thu, Nov 29, 2018 at 2:36 PM John Thorhauer <jthorha...@yakabod.com>
wrote:

> So my understanding is that the DelegatingCollector.collect() method has
> access to a single doc.  At that point I must choose to either call
> super.collect() or not.  So this is the point at which I have to check
> redis for security data for a single doc and determine if this doc should
> be allowed as part of the result set or not.  So it seems that I have to
> check my redis cache one doc at a time since I am only provided one doc in
> the collect() method and I must determine at this point if I should call
> the super.collect() or not.
>
> I would like to find an option where I can get all the docs in the
> postfilter and run a single query to redis with all of the docs at once to
> get a single answer back from redis and then determine, based on the redis
> response, which of the docs should be allowed to pass thru my postfilter.
>
>
>
>
> On Fri, Nov 16, 2018 at 4:30 PM Mikhail Khludnev <m...@apache.org> wrote:
>
> > On Tue, Nov 13, 2018 at 6:36 AM John Thorhauer <jthorha...@yakabod.com>
> > wrote:
> >
> > > Mikhail,
> > >
> > > Where do I implement the buffering?  I can not do it in then collect()
> > > method.
> >
> > Please clarify why exactly? Notice my statement about one segment only.
> >
> >
> > > I can not see how I can get access to what I need in the finish()
> > > method.
> > >
> > > Thanks,
> > > John
> > >
> > > On Tue, Nov 6, 2018 at 12:44 PM Mikhail Khludnev <m...@apache.org>
> > wrote:
> > >
> > > > Not really. It expect to work segment by segment. So it can buffer
> all
> > > doc
> > > > from one segment, hit redis and push all results into delegating
> > > collector.
> > > >
> > > > On Tue, Nov 6, 2018 at 8:29 PM John Thorhauer <
> jthorha...@yakabod.com>
> > > > wrote:
> > > >
> > > > > Mikhail,
> > > > >
> > > > > Thanks for the suggestion.  After looking over the PostFilter
> > interface
> > > > and
> > > > > the DelegatingCollector, it appears that this would require me to
> > query
> > > > my
> > > > > outside datastore (redis) for security information once for each
> > > > document.
> > > > > This would be a big performance issue.  I would like to be able to
> > > > iterate
> > > > > through the documents, gathering all the critical ID's and then
> send
> > a
> > > > > single query to redis, getting back my security related data, and
> > then
> > > > > iterate through the documents, pulling out the ones that the user
> > > should
> > > > > not see.
> > > > >
> > > > > Is this possible?
> > > > >
> > > > > Thanks again for your help!
> > > > > John
> > > > >
> > > > >
> > > > > On Tue, Nov 6, 2018 at 6:24 AM John Thorhauer <
> > jthorha...@yakabod.com>
> > > > > wrote:
> > > > >
> > > > > > We have a need to check the results of a search against a set of
> > > > security
> > > > > > lists that are maintained in a redis cache.  I need to be able to
> > > take
> > > > > each
> > > > > > document that is returned for a search and check the redis cache
> to
> > > see
> > > > > if
> > > > > > the document should be displayed or not.
> > > > > >
> > > > > > I am attempting to do this by creating a SearchComponent.  I am
> > able
> > > to
> > > > > > iterate thru the results and identify the items I want to remove
> > from
> > > > the
> > > > > > results but I am not sure how to proceed in removing them.
> > > > > >
> > > > > > Is SearchComponent the best way to do this?  If so, any thoughts
> on
> > > how
> > > > > to
> > > > > > proceed?
> > > > > >
> > > > > >
> > > > > > Thanks,
> > > > > > John Thorhauer
> > > > > >
> > > > > >
> > > > >
> > > > > --
> > > > > John Thorhauer
> > > > > Vice President, Software Development
> > > > > Yakabod, Inc.
> > > > > Cell: 240-818-9050
> > > > > Office: 301-662-4554 x2105
> > > > >
> > > >
> > > >
> > > > --
> > > > Sincerely yours
> > > > Mikhail Khludnev
> > > >
> > >
> > >
> > > --
> > > John Thorhauer
> > > Vice President, Software Development
> > > Yakabod, Inc.
> > > Cell: 240-818-9050
> > > Office: 301-662-4554 x2105
> > >
> >
> >
> > --
> > Sincerely yours
> > Mikhail Khludnev
> >
>


-- 
Sincerely yours
Mikhail Khludnev

Reply via email to