Hello,
we have chosen to use Lucene as the metadata database for a project. Everything works great, from indexing to multi-threading search. Also, we have chosen to split storage and security. It works great, except when we come to filtering. I have understood that Filter should set bits on documents that are ok, but it is not the way we want to do it.

What our security service can give, is a Collection<String> corresponding to a Document field, let's say "uuid". This collection handles all documents user can read. So, is there a way to set an event on "this document match the query, does the filter keep this one in the list?". This way, we have not to get all "uuid" of all Lucene docs in our filter, that is really costy.

We can filter Hits returned by search, but there should be a smarter way to do it, no?

As summarizing this problem, got an idea :
How to create a Filter for a field in Collection<String>?
First, split Collection in Collection<Collection> with BooleanQuery.maxClauseCount items maximum in each collection.
For each collection :
 create a BooleanQuery with a TermQuery for each String.
 perform a search with a HitCollector filling a BitSet
Now we have BitSet of each Collection, perform a BitSet.or to get a final BitSet Build a Filter based on that BitSet, and use that Filter as parameter of each search

Of course, a cache system should be added, managed by security telling if Collection as changed, to rebuild the user Filter.

Is it a good idea?

Thanks,

--
Gabriel <[EMAIL PROTECTED]>
http://www.codelutin.com
tel : 02 40 50 29 28 / fax : 09 59 92 29 28


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to