Anyone has any idea?

On Sun, Jan 15, 2017 at 9:54 PM, map reduced <k3t.gi...@gmail.com> wrote:

> I may have used wrong terminology, by complex types I meant non-primitive
> types. Mutlivalued can be conceptualized as a list of values for instance
> in your example myint = [ 32, 77] etc which you can possibly analyze and
> query upon. What I was trying to ask is if a complex type can be
> multi-valued or something along those lines that can be supported by range
> queries.
>
> For instance: Below rows will have to be individual docs in Solr (in my
> knowledge) -  If I want to range query from ts=Jan 12 to ts=Jan 15 give me
> sum of 'unique' where 'contentId=1,product=mobile'
>
> contentId=1,product=mobile    ts=Jan15     total=12,unique=5
> contentId=1,product=mobile    ts=Jan14     total=10,unique=3
> contentId=1,product=mobile    ts=Jan13     total=15,unique=2
> contentId=1,product=mobile    ts=Jan12     total=17,unique=4
> ......
>
> This increases number of documents in Solr by a lot. Only if there was a
> way to do something like:
>
> {
> contentId=1
> product=mobile
> ts = [
>
> {
>
> time = Jan15
>
> total = 12
>
> unique = 15
>
> },
> {
>
> time = Jan16
>
> total = 10
>
> unique = 3
>
> },
>
> ..
> ..
> ]}
>
> Of course above isn't allowed, but some way to squeeze timestamps in
> single document so that it doesn't increase the number of document by a lot
> and I am still able to range query on 'ts'.
>
> For some (combination of fields) rows the timestamps may go upto last 3-6
> months!
>
> Let me know if I am still being unclear.
>
> On Sun, Jan 15, 2017 at 8:04 PM, Erick Erickson <erickerick...@gmail.com>
> wrote:
>
>> bq: I know multivalued fields don't support complex data  types
>>
>> Not sure what you're talking about here. mulitValued actually has
>> nothing to do with data types. You can have text fields which
>> are analyzed and produce multiple tokens and are multiValued.
>> You can have primitive types (string, int/long/float/double,
>> boolean etc) that are multivalued. or they can be single valued.
>>
>> All "multiValued" means is that the _input_ can have the same field
>> repeated, i.e.
>> <doc>
>>   <field name="mytext">some stuff</field>
>>   <field name="mytext">more stuff</field>
>>   <field name='myint"">32</field>
>>   <field name='myint"">77</field>
>> </doc>
>>
>> This doc would fail of mytext or myint were multiValued=false but
>> succeed if multiValued=true at index time.
>>
>> There are some subtleties with text (analyzed) multivalued fields having
>> to do with token offsets, but that's not germane.
>>
>> Does that change your problem? Your document could have a dozen
>> timestamps....
>>
>> However, there isn't a good way to query across multiple multivalued
>> fields
>> in parallel. That is, a doc like
>>
>> myint=1
>> myint=2
>> myint=3
>> mylong=4
>> mylong=5
>> mylong=6
>>
>> there's no good way to say "only match this document if mhyint=1 AND
>> mylong=4 AND they_are_both_in_the_same_position.
>>
>> That is, asking for myint=1 AND mylong=6 would match the above. Is
>> that what you're
>> wondering about?
>>
>> ------------------
>> I expect you're really asking to do the second above, in which case you
>> might
>> want to look at StreamingExpressions and/or ParallelSQL in Solr 6.x
>>
>> Best,
>> Erick
>>
>> On Sun, Jan 15, 2017 at 7:31 PM, map reduced <k3t.gi...@gmail.com> wrote:
>> > Hi,
>> >
>> > I am trying to fit the following data in Solr to support flexible
>> queries
>> > and would like to get your input on the same. I have data about users
>> say:
>> >
>> > contentID (assume uuid),
>> > platform (eg. website, mobile etc),
>> > softwareVersion (eg. sw1.1, sw2.5, ..etc),
>> > regionId (eg. us144, uk123, etc..)
>> > ....
>> >
>> > and few more other such fields. This data is partially pre aggregated
>> (read
>> > Hadoop jobs): so let’s assume for "contentID = uuid123 and platform =
>> > mobile and softwareVersion = sw1.2 and regionId = ANY" I have data in
>> > format:
>> >
>> > timestamp  pre-aggregated data [ uniques, total]
>> >  Jan 15    [ 12, 4]
>> >  Jan 14    [ 4, 3]
>> >  Jan 13    [ 8, 7]
>> >  ...        ...
>> >
>> > And then I also have less granular data say "contentID = uuid123 and
>> > platform = mobile and softwareVersion = ANY and regionId = ANY (These
>> > values will be more than above table since granularity is reduced)
>> >
>> > timestamp : pre-aggregated data [uniques, total]
>> >  Jan 15    [ 100, 40]
>> >  Jan 14    [ 45, 30]
>> >  ...           ...
>> >
>> > I'll get queries like "contentID = uuid123 and platform = mobile" , give
>> > sum of 'uniques' for Jan15 - Jan13 or for "contentID=uuid123 and
>> > platform=mobile and softwareVersion=sw1.2", give sum of 'total' for
>> Jan15 -
>> > Jan01.
>> >
>> > I was thinking of simple schema where documents will be like (first
>> example
>> > above):
>> >
>> > {
>> >   "contentID": "uuid12349789",
>> >   "platform" : "mobile",
>> >   "softwareVersion": "sw1.2",
>> >   "regionId": "ANY",
>> >   "ts" : "2017-01-15T01:01:21Z",
>> >   "unique": 12,
>> >   "total": 4
>> > }
>> >
>> > second example from above:
>> >
>> > {
>> >   "contentID": "uuid12349789",
>> >   "platform" : "mobile",
>> >   "softwareVersion": "ANY",
>> >   "regionId": "ANY",
>> >   "ts" : "2017-01-15T01:01:21Z",
>> >   "unique": 100,
>> >   "total": 40
>> > }
>> >
>> > Possible optimization:
>> >
>> > {
>> >   "contentID": "uuid12349789",
>> >   "platform.mobile.softwareVersion.sw1.2.region.us12" : {
>> >       "unique": 12,
>> >       "total": 4
>> >   },
>> >  "platform.mobile.softwareVersion.sw1.2.region.ANY" : {
>> >       "unique": 100,
>> >       "total": 40
>> >   },
>> >   "ts" : "2017-01-15T01:01:21Z"
>> >   }
>> >
>> > Challenges: Number of such rows is very large and it'll grow
>> exponentially
>> > with every new field - For instance if I go with above suggested schema,
>> > I'll end up storing a new document for each combination of
>> > contentID,platform,softwareVersion,regionId. Now if we throw in another
>> > field to this document, number of combinations increase exponentially.I
>> > have more than a billion such combination rows already.
>> >
>> > I am hoping to find advice by experts if
>> >
>> >    1. Multiple such fields can be fit in same document for different
>> 'ts'
>> >    such that range queries are possible on it.
>> >    2. time range (ts) can be fit in same document as a list(?) (to
>> reduce
>> >    number of rows). I know multivalued fields don't support complex data
>> >    types, but if anything else can be done with the data/schema to
>> reduce
>> >    query time and number of rows.
>> >
>> > The number of these rows are very large, for sure more than 1billion
>> (if we
>> > go with the schema I was suggesting). What schema would you suggest for
>> > this that'll fit query requirements?
>> >
>> > FYI: All queries will be exact match on fields (no partial or
>> tokenized),
>> > so no analysis on fields is necessary. And almost all queries are range
>> > queries.
>> >
>> > Thanks,
>> >
>> > KP
>>
>
>

Reply via email to