I remember several years ago a discussion/blog post about a similar
problem. The author went through a lot of thinking and decided that
the best way to deal with a similar problem was to have Solr documents
represent different level of abstraction, more granular.

IIRC, the equivalent for your example would be to represent 'pricing'
(or even pricing/availability) as the document, not a 'product'. You
may need to duplicate product field values for that to work. But that
- apparently - allowed them to represent a lot of concepts (like
upcoming discounts, etc) easier by just adding availability dates, etc
into that final lower-level record. And, of course, allowed to update
individual store/product price by changing one record per time without
having to invalidate the cache for all other stores.

Regards,
   Alex.


On Mon, 21 Oct 2019 at 09:59, Vincenzo D'Amore <v.dam...@gmail.com> wrote:
>
> Hi Erick,
>
> thanks for getting back to me. We started to use payloads because we have
> the classical per-store pricing problem.
> Thousands of stores across and different prices.
> Then we found the payloads very useful started to use it for many reasons,
> like enabling/disabling the product for such store, save the stock
> availability, or save the other info like buy/sell price, discount rates,
> and so on.
> All those information are numbers, but stores can also be in different
> countries, I mean would be useful also have the currency and other
> attributes related to the store.
>
> Thinking about an alternative for payloads maybe I could use the dynamic
> fields, well, I know it is ugly.
>
> Consider this hypothetical case where I have two field payload :
>
> payloadPrice: [
> "store1|125.0",
> "store2|220.0",
> "store3|225.0"
> ]
>
> payloadCurrency: [
> "store1|USD",
> "store2|EUR",
> "store3|GBP"
> ]
>
> with dynamic fields I could have different fields for each document.
>
> currency_store1_s: "USD"
> currency_store2_s: "EUR"
> currency_store3_s: "GBP"
>
> But how many dynamic fields like this can I have? more than thousands?
>
> Again, I've just started to look at solr-ocrhighlighting github project you
> suggested.
> Those seems have written their own payload object type where store ocr
> highlighting information.
> It seems interesting, I'll take a look immediately.
>
> Thanks again for your time.
>
> Best regards,
> Vincenzo
>
>
> On Mon, Oct 21, 2019 at 2:55 PM Erick Erickson <erickerick...@gmail.com>
> wrote:
>
> > This is one of those situations where I know a client did it, but didn’t
> > see the code myself.
> >
> > So I can’t help much.
> >
> > Perhaps a good question at this point, though, is “why do you want to add
> > string payloads anyway”?
> >
> > This isn’t the client, but it might give you some pointers:
> >
> >
> > https://github.com/dbmdz/solr-ocrpayload-plugin/blob/master/src/main/java/de/digitalcollections/solr/plugin/components/ocrhighlighting/OcrHighlighting.java
> >
> > Best,
> > Erick
> >
> > > On Oct 21, 2019, at 6:37 AM, Vincenzo D'Amore <v.dam...@gmail.com>
> > wrote:
> > >
> > > Hi Erick,
> > >
> > > It seems I've reached a dead-point, or at least it seems looking at the
> > > code, it seems I can't  easily add a custom decoder:
> > >
> > > Looking at PayloadUtils class there is getPayloadDecoder method invoked
> > to
> > > return the PayloadDecoder :
> > >
> > >  public static PayloadDecoder getPayloadDecoder(FieldType fieldType) {
> > >    PayloadDecoder decoder = null;
> > >
> > >    String encoder = getPayloadEncoder(fieldType);
> > >
> > >    if ("integer".equals(encoder)) {
> > >      decoder = (BytesRef payload) -> payload == null ? 1 :
> > > PayloadHelper.decodeInt(payload.bytes, payload.offset);
> > >    }
> > >    if ("float".equals(encoder)) {
> > >      decoder = (BytesRef payload) -> payload == null ? 1 :
> > > PayloadHelper.decodeFloat(payload.bytes, payload.offset);
> > >    }
> > >    // encoder could be "identity" at this point, in the case of
> > > DelimitedTokenFilterFactory encoder="identity"
> > >
> > >    // TODO: support pluggable payload decoders?
> > >
> > >    return decoder;
> > >  }
> > >
> > > Any advice to work around this situation?
> > >
> > >
> > > On Mon, Oct 21, 2019 at 1:51 AM Erick Erickson <erickerick...@gmail.com>
> > > wrote:
> > >
> > >> You’d need to write one. Payloads are generally intended to hold
> > numerics
> > >> you can then use in a function query to factor into the score…
> > >>
> > >> Best,
> > >> Erick
> > >>
> > >>> On Oct 20, 2019, at 4:57 PM, Vincenzo D'Amore <v.dam...@gmail.com>
> > >> wrote:
> > >>>
> > >>> Sorry, I just realized that I was wrong in how I'm using the payload
> > >>> function.
> > >>> Give that the payload function only handles a numeric (integer or
> > float)
> > >>> payload, could you suggest me an alternative function that handles
> > >> strings?
> > >>> If not, should I write one?
> > >>>
> > >>> On Sun, Oct 20, 2019 at 10:43 PM Vincenzo D'Amore <v.dam...@gmail.com>
> > >>> wrote:
> > >>>
> > >>>> Hi all,
> > >>>>
> > >>>> I'm trying to understand what I did wrong with a payload query that
> > >>>> returns
> > >>>>
> > >>>> error: {
> > >>>> metadata: [ "error-class", "org.apache.solr.common.SolrException",
> > >>>> "root-error-class", "org.apache.solr.common.SolrException" ],
> > >>>> msg: "No payload decoder found for field: colorCode",
> > >>>> code: 400
> > >>>> }
> > >>>>
> > >>>> I have reduced my problem in a little sample to show what happens to
> > me.
> > >>>> Basically I have a document with a couple of payload fields one
> > >>>> delimited_payloads_string and one delimited_payloads_integer
> > >>>>
> > >>>> {
> > >>>> field_dps: "key|data",
> > >>>> field_dpi: "key|1",
> > >>>> }
> > >>>>
> > >>>> When I execute this query solr returns as expected the payload for the
> > >> key
> > >>>>
> > >>>> q=*:*&fl=payload(field_dpi,key)
> > >>>>
> > >>>> {
> > >>>> payload(field_dpi,key): 1
> > >>>> }
> > >>>>
> > >>>> But for the strings there have to be something of different to do,
> > >> because
> > >>>> I'm unable receive the payload value back. Executing this query, as in
> > >> the
> > >>>> short introduction of this post, I receive an error.
> > >>>>
> > >>>> ?q=*:*&fl=payload(field_dps,key)
> > >>>>
> > >>>> error: {
> > >>>> metadata: [ "error-class", "org.apache.solr.common.SolrException",
> > >>>> "root-error-class", "org.apache.solr.common.SolrException" ],
> > >>>> msg: "No payload decoder found for field: colorCode",
> > >>>> code: 400
> > >>>> }
> > >>>>
> > >>>> Am I doing something wrong? How can I read strings payload data?
> > >>>>
> > >>>> Thanks in advance for your time,
> > >>>> Vincenzo
> > >>>>
> > >>>> --
> > >>>> Vincenzo D'Amore
> > >>>>
> > >>>>
> > >>>
> > >>> --
> > >>> Vincenzo D'Amore
> > >>
> > >>
> > >
> > > --
> > > Vincenzo D'Amore
> >
> >
>
> --
> Vincenzo D'Amore

Reply via email to