How many different groups are there? And can user A ever be part of
more than one group?
If
1> there are a reasonably small number of groups (< 100 or so as a
place to start)
and
2> a user is always part of a single group

then you could store separate prices in each document by group, thus
you'd have some fields like
price_group_a: $100
price_group_b: $101

then sorting  becomes trivial, you just specify a sort_group_a for
users in group A etc. If the number of groups is unknown-but-not-huge
dynamic fields could be used.

If that's not the case, then you might be able to get clever with
sorting by function, here's a place to start:
https://cwiki.apache.org/confluence/display/solr/Function+Queries

These can be arbitrarily complex, but I'm thinking something where the
price returned by the function respects the group the user is in,
perhaps even the min/max of all the groups the user is in. I admit I
haven't really thought that through well though...

Best,
Erick

On Sat, Sep 20, 2014 at 9:26 AM, Scott Smith <ssm...@mainstreamdata.com> wrote:
> I need to provide a custom sort option for sorting by price and I would like 
> some suggestions.  It's not the straightforward "just sort by a price field 
> in the document" scenario or I wouldn't be asking for help.  Here's the 
> scenario I'm dealing with.
>
> I have 100 million+ documents (so multi-sharded).  Users search for documents 
> they are interested in using a standard keyword search.  They then purchase 
> documents they are interested in.  So far, nothing hard.
>
> Here's where things get "interesting".  The documents come from multiple 
> suppliers.  Each supplier sets a price for his documents and different 
> suppliers will provide different pricing.
>
> That wouldn't be difficult except that *users* are divided up into different 
> groups and depending on which group they are in, the supplier will charge the 
> user a different price.  So, user A may pay one price for a document and user 
> B may pay a different price for the same document just because user A and 
> user B are in different groups.  I don't even know if the relative order or 
> pricing is the same between different groups (e.g., if document X is more 
> expensive than document Y for a user in group M, it may not be more expensive 
> for a user in group N).  The one thing that may make this doable is that 
> supplier A will likely have the same price for all of his documents for each 
> of the user groups.  So, a user in group A will pay the same price regardless 
> of which document he buys from supplier 1.  A user in group B will also pay 
> the same price for any document from supplier 1; it's just that a user in 
> group B will likely pay a different price than a user in group A.  So, within 
> a supplier, the price varies based on user group, not the document.
>
> To summarize, one of the requirements for the system is that we provide the 
> ability to sort search results based on price.  This would be easy except 
> that the price a user pays not only depends on what he wants to buy, but on 
> what group the he is in.
>
> I suspect there is some kind of custom solr module I'm going to have to 
> write.  I'm thinking that the user group gets passed in as a custom solr 
> parameter (I'm assuming that's possible??).  Then I'm thinking that there has 
> to be some kind of in memory database that tracks pricing based on user group 
> and document supplier).
>
> I'm happy to go read code, documents, links, etc if someone can point me in 
> the right direction.  What kind of solr module am I likely going to write 
> (extend) and are there some examples somewhere?  Maybe there's a way to do 
> this without having to extend a solr module??
>
> Hope this makes sense.  Any help is appreciated.
>
> Scott
>
>

Reply via email to