Documents imbriqués dans Elasticsearch

Je suis en train d'écrire une application de gestion d'actifs. Il permet aux utilisateurs de stocker arbitraire de l'actif des attributs par l'ajout d'un contrôle html comme un champ de texte, sélectionnez menu, etc. à l'actif. Une représentation JSON de l'attribut devient alors une partie de l'actif JSON document stocké dans couchdb. Un actif a la structure suivante dans couchdb:

{
   "_id": "9399fb27448b1e5dfdca0181620418d4",
   "_rev": "12-fa50eae8b50f745f9852e9fab30ef5d9",
   "type": "asset",
   "attributes": [
       {
           "id": "9399fb27448b1e5dfdca01816203d609",
           "type": "text",
           "heading": "Brand",
           "data": "",
           "requiredBySystem": true
       },
       {
           "id": "9399fb27448b1e5dfdca01816203e68e",
           "type": "userSelectMenu",
           "heading": "Assigned To",
           "data": "",
           "requiredBySystem": true
       },
       {
           "id": "9399fb27448b1e5dfdca01816203e9c9",
           "type": "categories",
           "heading": "Categories",
           "data": [
               "0d7e6233e5f48b4f55c5376bf00b1be5",
               "0d7e6233e5f48b4f55c5376bf00d94cf"
           ],
           "requiredBySystem": true
       },
       {
           "id": "9399fb27448b1e5dfdca01816207uy5a",
           "type": "radio",
           "heading": "Radio Buttons",
           "data": [
               {
                   "text": "Button 1",
                   "checked": false
               },
               {
                   "text": "Button 2",
                   "checked": true
               }
           ],
           "requiredBySystem": true
       },
       {
           "id": "9399fb27448b1e5dfdca01816205tgh6",
           "type": "checkboxes",
           "heading": "Checkboxes",
           "data": [
             {
                 "text": "Box 1",
                 "checked": false
             },
             {
                 "text": "Box 2",
                 "checked": true
             }
           ],
           "requiredBySystem": true
       },
       {
           "id": "9399fb27448b1e5dfdca0181620k81gt",
           "type": "select",
           "heading": "Select Menu",
           "data": [
               {
                   "text": "Option 1",
                   "checked": false
               },
               {
                   "text": "Option 2",
                   "checked": true
               }
           ],
           "requiredBySystem": true
       }
   ]
}

Je ne sais pas si mettre des attributs dans un tableau est la meilleure façon de permettre à la recherche d'un actif en fonction de la valeur d'un attribut. Serait-il préférable de fixer l'attribut directement à l'actif en tant que propriété? Je suis en train d'expérimenter maintenant dans elasticsearch. Si j'essaie, et de stocker le document est, elasticsearch renvoie une erreur:

"erreur" : "MapperParsingException[Failed to parse [attributs.données]]; imbriquées: ElasticSearchIllegalArgumentException[propriété inconnue [texte]]; "

I"m en utilisant le mappage suivant:

"mappings" : {
    "asset" : {
      "properties" : {
        "_id": {
          "type" : "string",
          "index" : "not_analyzed"
        },
        "_rev": {
          "type" : "string",
          "index" : "not_analyzed"
        },
        "type": {
          "type" : "string",
          "index" : "not_analyzed"
        },
        "attributes": {
          "properties" : {
            "id" : {
              "type" : "string"
            },
            "type" : {
              "type" : "string",
              "index" : "not_analyzed"
            },
            "heading" : {
              "type" : "string"
            },
            "data" : {
              "type" : "string"
            }
          }
        }
      }
    }
  }

Ne sais pas où j'vais mal ici. Merci pour votre aide!

Troy

InformationsquelleAutor Troy | 2013-03-23