You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-user@lucene.apache.org by Georg Sorst <g....@findologic.com> on 2016/04/03 17:07:53 UTC

Re: Use default field, if more specific field does not exist

Hi Emir,

could this be done with Pivot faceting?

The idea is to use facet.pivot=price_USER_ID,price. Then I should get all
values + number of matching documents for price_USER_ID (sub-faceted by
price, which I can just ignore). Additionally, there should be one facet
value for price_USER_ID for all documents without this field. Due to the
Pivot facet the price_USER_ID=unknown will then be further faceted with the
values of the price field. I can then sum up the number of matching
documents for each value from either price_USER_ID or price (or both) and
present that to the user. Like this:

price_USER_ID: 5$ (2 matching documents)
price_USER_ID: 3 (1)
price_USER_ID: unknown (4)
    price: 5 (3)
    price: 2 (1)

So the facets presented to the user will be:

price: 5 (5) // 2+3=5
price: 3 (1)

Then when the user selects price:5 the filter query will be (as you
suggested above): price_USER_ID:5 OR (-price_USER_ID:[* TO *] AND price:5)

Do you think this will work? Any idea what the performance might be like?

Best,
Georg

Emir Arnautovic <em...@sematext.com> schrieb am Mo., 28. März
2016 um 13:56 Uhr:

> Hi Georg,
> I cannot think of similar trick that would enable you to facet on all
> values (other than applying this trick to buckets of size 1) but would
> warn you about faceting of high cardinality fields such as price. Not
> sure if you have some specific case, but calculating facet for such
> field can be pretty expensive and slow.
> I haven't look at it in details, but maybe you could find something
> useful in new Json facet API.
>
> Regards,
> Emir
>
> On 26.03.2016 12:15, Georg Sorst wrote:
> > Hi Emir,
> >
> > that sounds like a great idea and filtering should be just fine!
> >
> > In our case we need the individual price values (not the buckets), just
> > like facet.field=price but with respect to the user prices. Is this
> > possible as well?
> >
> > About the performance: Are there any specific bottlenecks you would
> expect?
> >
> > Best regards,
> > Georg
> >
> > Emir Arnautovic <em...@sematext.com> schrieb am Fr., 25. März
> > 2016 um 11:47 Uhr:
> >
> >> Hi Georg,
> >> One solution that could work on existing schema is to use query faceting
> >> and queries like (for USER_ID = 1, bucker 100 to 200):
> >>
> >> price_1:[100 TO 200] OR (-price_1:[* TO *] AND price:[100 TO 200])
> >>
> >> Same query is used for filtering. What you should test is if
> >> performances are acceptable.
> >>
> >> Thanks,
> >> Emir
> >>
> >> On 24.03.2016 22:31, Georg Sorst wrote:
> >>> Hi list,
> >>>
> >>> we use Solr to search ecommerce products.
> >>>
> >>> Items have a default price which can be overwritten per user. So when
> >>> searching we have to return the user price if it is set, otherwise the
> >>> default price. Same goes for building facets and when filtering by
> price.
> >>>
> >>> What's the best way to achieve this in Solr? We know the user ID when
> >>> sending the request to Solr so we could do something like this:
> >>>
> >>> * Add the default price in the field "price" to the items
> >>> * Add all the user prices in a field like "price_<USER_ID>"
> >>>
> >>> Now for displaying the correct price this is fine, just look if there
> is
> >> a
> >>> field "price_<USER_ID>" for this result item, otherwise just display
> the
> >>> value of the "price" field.
> >>>
> >>> The tricky part is faceting and filtering. Which field do we use?
> >>> "price_<USER_ID>"? What happens for users that don't have a user price
> >> set
> >>> for an item? In this case the "price_<USER_ID>" field does not exist so
> >>> faceting and filtering will not work.
> >>>
> >>> We thought about adding a "price_<USER_ID>" field for every item and
> >> every
> >>> user and fill in the default price for the item if the user does not
> have
> >>> an overwritten price for this item. This would potentially make our
> index
> >>> unnecessarily large. Consider 10,000 items and 10,000 users (quite
> >>> realistic), that's 100,000,000 "price_<USER_ID>" fields, even though
> >> maybe
> >>> only a few users have overwritten prices.
> >>>
> >>> What I've been (unsuccessfully) looking for is some sort of field
> >> fallback
> >>> where I can tell Solr something like "use price_<USER_ID> for the
> >> results,
> >>> facets and filter queries, and if that does not exist for an item, use
> >>> price instead". At first sight field aliases seemed like that but turns
> >> out
> >>> that just renames the field in the result items.
> >>>
> >>> So, is there something like this or is there a better solution anyway?
> >>>
> >>> Thanks,
> >>> Georg
> >> --
> >> Monitoring * Alerting * Anomaly Detection * Centralized Log Management
> >> Solr & Elasticsearch Support * http://sematext.com/
> >>
> >> --
> > *Georg M. Sorst I CTO*
> > FINDOLOGIC GmbH
> >
> >
> >
> > Jakob-Haringer-Str. 5a | 5020 Salzburg I T.: +43 662 456708
> > E.: g.sorst@findologic.com
> > www.findologic.com Folgen Sie uns auf: XING
> > <https://www.xing.com/profile/Georg_Sorst>facebook
> > <https://www.facebook.com/Findologic> Twitter
> > <https://twitter.com/findologic>
> >
> > Wir sehen uns auf dem *Shopware Community Day in Ahaus am 20.05.2016!*
> Hier
> > <beratung@findologic.com?subject=Terminvereinbarung%20SCD> Termin
> > vereinbaren!
> > Wir sehen uns auf der* dmexco in Köln am 14.09. und 15.09.2016!* Hier
> > <beratung@findologic.com?subject=Terminvereinbarung%20dmexco> Termin
> > vereinbaren!
> >
>
> --
> Monitoring * Alerting * Anomaly Detection * Centralized Log Management
> Solr & Elasticsearch Support * http://sematext.com/
>
> --
*Georg M. Sorst I CTO*
FINDOLOGIC GmbH



Jakob-Haringer-Str. 5a | 5020 Salzburg I T.: +43 662 456708
E.: g.sorst@findologic.com
www.findologic.com Folgen Sie uns auf: XING
<https://www.xing.com/profile/Georg_Sorst>facebook
<https://www.facebook.com/Findologic> Twitter
<https://twitter.com/findologic>

Wir sehen uns auf dem *Shopware Community Day in Ahaus am 20.05.2016!* Hier
<beratung@findologic.com?subject=Terminvereinbarung%20SCD> Termin
vereinbaren!
Wir sehen uns auf der* dmexco in Köln am 14.09. und 15.09.2016!* Hier
<beratung@findologic.com?subject=Terminvereinbarung%20dmexco> Termin
vereinbaren!