Thanks. I was also looking at dynamic mapping templates
(http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-root-object-type.html#_dynamic_templates)
too. Would that approach work if I were to flatten my JSON so it'd be more
like:
{
"name": "john",
"age": 25,
"attribute-key1" : value1,
"attribute-key2" : value2,
"attribute-key3" : value3,
}
I could even take this further and make the key/value pair multi-fields so they
can contain multiple types either at application side or using
(http://www.elasticsearch.org/guide/en/elasticsearch/reference/0.90/mapping-multi-field-type.html)
This is how the JSON will look like if I were to implement the multi-fields
application side:
{
"name": "john",
"age": 25,
"attribute-string-key1" : value1,
"attribute-int-key2" : value2,
"attribute-string-key3" : value3,
}
Do you see any pro/cons with this approach vs the nested types approach?
- Drew
On Jun 11, 2014, at 1:39 AM, Thomas <[email protected]> wrote:
> one way would be to use a nested document structure like:
> check:
> http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-nested-type.html#mapping-nested-type
> ..
> "properties" : {
> "type":"nested"
> "attributes":{
> "key" : {
> "index" : "not_analyzed",
> "type" : "string"
> },
> "value" : {
> "index":"not_analyzed"
> "type" : "string"
> }
> }
> }
> ...
> You may even use multiple fields depending of the type of the value, and if
> you know the type of each key to be able to index it properly and do search
> upon it
>
> "properties" : {
> "type":"nested"
> "attributes":{
> "key" : {
> "index" : "not_analyzed",
> "type" : "string"
> },
> "stringValue" : {
> "index":"not_analyzed"
> "type" : "string"
> },
> "numericValue" : {
> "type" : "float"
> }
> }
> }
>
> How are you going to update the document? If you chose this way and you
> perform updates on a nested document(e.g. add a key value) the whole document
> is reindexed
>
> Hope it helps
>
> Thomas
>
> On Wednesday, 11 June 2014 04:09:16 UTC+3, Drew wrote:
> Hey Guys,
>
> How can I map an arbitrary map of key/values in ES? My JSON looks like the
> following, where "name" and "age" are static but "attributes" is dynamic:
>
> {
> "name": "john",
> "age": 25,
> "attributes" : {
> "key1": value1,
> "key2": value2,
> "key3": value3,
> ...
> }
> }
>
> Things to consider:
> 1. Not all documents have the same number of attributes or even the same
> attributes.
> 2. Different documents can have values of different types for the same name
> attributes (say "attr1" is string for doc 1 but is int for doc 2)
> 3. Attribute value can only be primitive json type (boolean, integer, number,
> null or string) or an array of primitive type.
> 4. It goes without saying that the attributes must be searchable.
>
> Thanks,
>
> Drew
>
> --
> You received this message because you are subscribed to the Google Groups
> "elasticsearch" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/elasticsearch/fb125974-b7a8-461b-9701-fea71cf38855%40googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups
"elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/elasticsearch/688F6074-9B85-4769-99BD-706EEE8903B3%40venarc.com.
For more options, visit https://groups.google.com/d/optout.