Modeling Objects That Have Many Properties

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Modeling Objects That Have Many Properties

Peter Hodgman
Hello,

I have a situation where I want to understand the best way to model this data in ES. I have the following data

Object -> Has Many -> Properties

where a 

Property  -> is a -> Name (String), and a Value( one of -> Boolean, Integer, Double, String, Long)

and the Object is the container of the properties via the "the-properties" field below. It also has a simple name field "the-name" as a general object identifier. 


So essentially I have an object that has many properties where each property can have a name, and a value but the value can be one of many types as noted above. So this is a bit dynamic in nature as it relates to  the properties value "type". 

One way to establish a mapping is as follows, but it seems a bit hacky. Is there a better way? 

curl -XPUT 'http://localhost:9200/bo-objects/_mapping/bo' -d '{
    "bo": {
      "properties": {
         "the-name" : {
            "type" : "string", 
            "store" : true 
         },
         "the-properties": {
            "type" : "nested",
            "properties" : {
               "name" : {
                  "type" : "string", 
                  "store" : true 
               },
               "value" : {
                  "type" : "object",
                  "properties" : {
                     "as_double" : { "type": "double", "store": true} ,
                     "as_int" : { "type": "integer", "store": true} ,
                     "as_string" : { "type": "string", "store": true} ,
                     "as_bool" : { "type": "boolean", "store": true} 
                  }
               }
            }
         }
      }
    }
  }'

which results in an ES data structure like this..

  • "_source": { 
    • "name""My Object",
    • "properties": [ 
        • "name""foo",
        • "value": { 
          • "as_double"23.56
          }
        }
      • ,
        • "name""bar",
        • "value": { 
          • "as_bool"false
          }
        }
      • ,
        • "name""bla",
        • "value": { 
          • "as_double"22.56
          }
        }
      • ,
        • "name""junk",
        • "value": { 
          • "as_double"8.56
          }
        }
      • ,
        • "name""fee",
        • "value": { 
          • "as_string""D6677"
          }
        }
      ]
    }
}

Thanks

--
Please update your bookmarks! We have moved to https://discuss.elastic.co/
---
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 [hidden email].
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/6fdbfe26-4032-4664-91ce-582a0d832bf4%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: Modeling Objects That Have Many Properties

Mark Walkom-2
You probably want to use parent/child instead, that way you don't have to update the entire document each time, just the child(ren).


PS - We're moving to https://discuss.elastic.co/, please join us there for any future discussions!

On 15 May 2015 at 22:52, Peter Hodgman <[hidden email]> wrote:
Hello,

I have a situation where I want to understand the best way to model this data in ES. I have the following data

Object -> Has Many -> Properties

where a 

Property  -> is a -> Name (String), and a Value( one of -> Boolean, Integer, Double, String, Long)

and the Object is the container of the properties via the "the-properties" field below. It also has a simple name field "the-name" as a general object identifier. 


So essentially I have an object that has many properties where each property can have a name, and a value but the value can be one of many types as noted above. So this is a bit dynamic in nature as it relates to  the properties value "type". 

One way to establish a mapping is as follows, but it seems a bit hacky. Is there a better way? 

    "bo": {
      "properties": {
         "the-name" : {
            "type" : "string", 
            "store" : true 
         },
         "the-properties": {
            "type" : "nested",
            "properties" : {
               "name" : {
                  "type" : "string", 
                  "store" : true 
               },
               "value" : {
                  "type" : "object",
                  "properties" : {
                     "as_double" : { "type": "double", "store": true} ,
                     "as_int" : { "type": "integer", "store": true} ,
                     "as_string" : { "type": "string", "store": true} ,
                     "as_bool" : { "type": "boolean", "store": true} 
                  }
               }
            }
         }
      }
    }
  }'

which results in an ES data structure like this..

  • "_source": { 
    • "name""My Object",
    • "properties": [ 
        • "name""foo",
        • "value": { 
          • "as_double"23.56
          }
        }
      • ,
        • "name""bar",
        • "value": { 
          • "as_bool"false
          }
        }
      • ,
        • "name""bla",
        • "value": { 
          • "as_double"22.56
          }
        }
      • ,
        • "name""junk",
        • "value": { 
          • "as_double"8.56
          }
        }
      • ,
        • "name""fee",
        • "value": { 
          • "as_string""D6677"
          }
        }
      ]
    }
}

Thanks

--
Please update your bookmarks! We have moved to https://discuss.elastic.co/
---
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 [hidden email].
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/6fdbfe26-4032-4664-91ce-582a0d832bf4%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

--
Please update your bookmarks! We have moved to https://discuss.elastic.co/
---
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 [hidden email].
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/CAEYi1X_sGhLc%2BxtdbmzAUWDAPOByNBZHSSy%3DiFUS4fne0Vc_%2Bg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.