#Everybody# (including me) who has any RDBMS background
doesn't want to flatten data, but that's usually the way to go in
Solr.

Part of whether it's a good idea or not depends on how big the index
gets, and unfortunately the only way to figure that out is to test.

But that's the first approach I'd try.

Good luck!
Erick

On Mon, Jun 6, 2011 at 11:42 AM, Judioo <cont...@judioo.com> wrote:
> On 5 June 2011 14:42, Erick Erickson <erickerick...@gmail.com> wrote:
>
>> See: http://wiki.apache.org/solr/SchemaXml
>>
>> By adding ' "multiValued="true" ' to the field, you can add
>> the same field multiple times in a doc, something like
>>
>> <add>
>> <doc>
>>  <field name="mv">value1</field>
>>  <field name="mv">value2</field>
>> </doc>
>> </add>
>>
>> I can't see how that would work as one would need to associate the right
> start / end dates and price.
> As I understand using multivalued and thus flattening the  discounts would
> result in:
>
> {
>    "name":"The Book",
>    "price":"$9.99",
>    "price":"$3.00",
>    "price":"$4.00",    "synopsis":"thanksgiving special",
>    "starts":"11-24-2011",
>    "starts":"10-10-2011",
>    "ends":"11-25-2011",
>    "ends":"10-11-2011",
>    "synopsis":"Canadian thanksgiving special",
>  },
>
> How does one differentiate the different offers?
>
>
>
>> But there's no real ability  in Solr to store "sub documents",
>> so you'd have to get creative in how you encoded the discounts...
>>
>
> This is what I'm asking :)
> What is the best / recommended / known patterns for doing this?
>
>
>
>>
>> But I suspect a better approach would be to store each discount as
>> a separate document. If you're in the trunk version, you could then
>> group results by, say, ISBN and get responses grouped together...
>>
>
> This is an option but seems sub optimal. So say I store the discounts in
> multiple documents with ISDN as an attribute and also store the title again
> with ISDN as an attribute.
>
> To get
> "all books currently discounted"
>
> requires 2 request
>
> * get all discounts currently active
> * get all books  using ISDN retrieved from above search
>
> Not that bad. However what happens when I want
> "all books that are currently on discount in the "horror" genre containing
> the word 'elm' in the title."
>
> The only way I can see in catering for the above search is to duplicate all
> searchable fields in my "book" document in my "discount" document. Coming
> from a RDBM background this seems wrong.
>
> Is this the correct approach to take?
>
>
>
>>
>> Best
>> Erick
>>
>> On Sat, Jun 4, 2011 at 1:42 AM, Judioo <cont...@judioo.com> wrote:
>> > Hi,
>> > Discounts can change daily. Also there can be a lot of them (over time
>> and
>> > in a given time period ).
>> >
>> > Could you give an example of what you mean buy multi-valuing the field.
>> >
>> > Thanks
>> >
>> > On 3 June 2011 14:29, Erick Erickson <erickerick...@gmail.com> wrote:
>> >
>> >> How often are the discounts changed? Because you can simply
>> >> re-index the book information with a multiValued "discounts" field
>> >> and get something similar to your example (&wt=json)....
>> >>
>> >>
>> >> Best
>> >> Erick
>> >>
>> >> On Fri, Jun 3, 2011 at 8:38 AM, Judioo <cont...@judioo.com> wrote:
>> >> > What is the "best practice" method to index the following in Solr:
>> >> >
>> >> > I'm attempting to use solr for a book store site.
>> >> >
>> >> > Each book will have a price but on occasions this will be discounted.
>> The
>> >> > discounted price exists for a defined time period but there may be
>> many
>> >> > discount periods. Each discount will have a brief synopsis, start and
>> end
>> >> > time.
>> >> >
>> >> > A subset of the desired output would be as follows:
>> >> >
>> >> > .......
>> >> > "response":{"numFound":1,"start":0,"docs":[
>> >> >  {
>> >> >    "name":"The Book",
>> >> >    "price":"$9.99",
>> >> >    "discounts":[
>> >> >        {
>> >> >         "price":"$3.00",
>> >> >         "synopsis":"thanksgiving special",
>> >> >         "starts":"11-24-2011",
>> >> >         "ends":"11-25-2011",
>> >> >        },
>> >> >        {
>> >> >         "price":"$4.00",
>> >> >         "synopsis":"Canadian thanksgiving special",
>> >> >         "starts":"10-10-2011",
>> >> >         "ends":"10-11-2011",
>> >> >        },
>> >> >     ]
>> >> >  },
>> >> >  .........
>> >> >
>> >> > A requirement is to be able to search for just discounted
>> publications. I
>> >> > think I could use date faceting for this ( return publications that
>> are
>> >> > within a discount window ). When a discount search is performed no
>> >> > publications that are not currently discounted will be returned.
>> >> >
>> >> > My question are:
>> >> >
>> >> >   - Does solr support this type of sub documents
>> >> >
>> >> > In the above example the discounts are the sub documents. I know solr
>> is
>> >> not
>> >> > a relational DB but I would like to store and index the above
>> >> representation
>> >> > in a single document if possible.
>> >> >
>> >> >   - what is the best method to approach the above
>> >> >
>> >> > I can see in many examples the authors tend to denormalize to solve
>> >> similar
>> >> > problems. This suggest that for each discount I am required to
>> duplicate
>> >> the
>> >> > book data or form a document
>> >> > association<
>> http://stackoverflow.com/questions/2689399/solr-associations
>> >> >.
>> >> > Which method would you advise?
>> >> >
>> >> > It would be nice if solr could return a response structured as above.
>> >> >
>> >> > Much Thanks
>> >> >
>> >>
>> >
>>
>

Reply via email to