I have used two different ways:

1) Store mapping from users to documents in some external database
such as MySQL.  At search time, lookup mapping for user to some unique
doc ID or some group ID, and then build query or doc set which you can
cache in SOLR process for some period.  Then use that as a filter in
your search.  This is more involved approach but better if you have
lots of ACLs per user, but it is non-trivial to implement it well.  I
used this in a system with over 100 million docs, and approx. 20,000
ACLs per user.  The ACL mapped user to a set of group IDs, and each
group could have 10,000+ documents.

2) Generate a query filter that you pass to SOLR as part of the
search.  Potentially it could be a pretty large query if user has
granular ACL over may documents or groups.  I've seen it work ok with
up to 1000 or so ACLs per user query.  So you build that filter query
from the client using some external database to lookup user ACLs
before sending request to SOLR.

Bob


On Tue, Nov 22, 2011 at 10:48 PM, Floyd Wu <floyd...@gmail.com> wrote:
> Hi there,
>
> Is it possible to separate ACL index and document index and achieve to
> search by user role in SOLR?
>
> Currently my implementation is to index ACL with document, but the
> document itself change frequently. I have to perform rebuild index
> every time when ACL change. It's heavy for whole system due to
> document are so many and content are huge.
>
> Do you guys have any solution to solve this problem. I've been read
> mailing list for a while. Seem there is not suitable solution for me.
>
> I want user searches result only for him according to his role but I
> don't want to re-index document every time when document's ACL change.
>
> To my knowledge, is this possible to perform a join like database to
> achieve this? How and possible?
>
> Thanks
>
> Floyd
>

Reply via email to