You might get some mileage out of encoding what you can in the documents
and doing a standard fq clause on that part, and then have your post-filter
do the really wild stuff. But you're right, you have to be prepared for the
nightmare scenario of your sysadmin who has rights to see everything firing
off a *:* query......

Other options:

1> fail after a certain number of docs have been evaluated (or perhaps
passed your filter). Return some message about "query too expensive, refine
it please". "Fail" here means that you deny rights to all documents after
some number N is passed.

2> think hard about your permissions model. Perhaps you can encode more of
it into your documents than you think.

3> External File Fields. Maybe you could encode some of the permissions in
an EFF and use that when calculating permissions. Consider your "day of
week" question. While I know nothing of what that means, let's assume it
means that some documents are available only on a particular day of the
week. At midnight on Monday you calculate the EFF field for a field
day_of_week_available for Tuesday and re-load your searcher. Your filter
uses the EFF field to calculate permissions. You might be able to extend
this idea to make the problem tractable.

4> Think really hard about whether your permissions model is really useful
to enough users to be worth the headache. Often you have no choice, but if
you could say "if we don't support feature X, we can give you query speed
Y, is it worth it?".

Best,
Erick


On Thu, Feb 28, 2013 at 8:10 PM, Chris Hostetter
<hossman_luc...@fucit.org>wrote:

>
> : Actually, after thinking for a bit, it makes sense to apply the post
> : filter everywhere, otherwise I wouldn't be able to know the number of
> : results overall (something I unfortunately really need).
>
> Not to mention things like facet counts, which need access to the full set
> of matching documents.
>
> Situations like this are why using a high "cost" value are really
> important on "expensive" filters -- you want to ensure that all of the
> "cheap" filtering that can be done on your request, is done before your
> PostFilter ever gets executed, to minimize the amount of external logic
> you have to apply.
>
> In a synthetic test like this, matching all documents w/o any other
> filtering, that "cost" is irrelevant, but it's important to remember when
> you start creating your real world requests.
>
>
> -Hoss
>

Reply via email to