Hi all,

at last I've tried to write my own payload function, and it has worked
(pretty well) immediately!
Well, to be honest I'm a little puzzled, so I have applied immediately the
first rule: always beware when your code works at first run.

Now I'm testing it.

On Mon, Oct 21, 2019 at 4:37 PM Erick Erickson <erickerick...@gmail.com>
wrote:

> Don’t go to thousands of fields, it’s usually a bad idea for that many
> fields.
>
> If all you’re doing is returning the data for display, have you considered
> indexing, perhaps in a separate field, a string token for each? Something
> like
> store1_USD_125.00
> ?
>
> Then have the UI split that apart in a pleasing manner.
>
> Doesn’t work if you want to, say, sort by price though.
>
> Erick
>
> > On Oct 21, 2019, at 10:19 AM, Alexandre Rafalovitch <arafa...@gmail.com>
> wrote:
> >
> > 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
>
>

-- 
Vincenzo D'Amore

Reply via email to