2016-05-02 5 views
0

Ich habe ein Json Dokument:Zugang angegebenen Attribute von Json für Suchindex in cloudant

{ 
    "_id": "3de00db35e6549604c711e7295a1982a", 
    "_rev": "1-ecba71644d341dfe5cb9abf6dd13b23a", 
    "dateCreated": "2014-01-29 00:00:00", 
    "attributeCollection": { 
    "attributeArray": [ 
     { 
     "updateable": false, 
     "lookup": "issuetype", 
     "issueAttributeDefinitionId": 13, 
     "attributeType": 1, 
     "name": "Web Type", 
     "value": [ 
      "Improper Limitation of Authentication" 
     ] 
     }, 
     { 
     "updateable": true, 
     "lookup": "status", 
     "issueAttributeDefinitionId": 1, 
     "attributeType": 4, 
     "name": "Status", 
     "value": [ 
      "Access with Right Permission" 
     ] 
     } 
    ] 
    }, 
    "hash": "287030d6efa085b5b92b7106c0edb6d7" 
} 

I Suchindex für Dokument erstellen möchten „name“ und „Wert“ („name“ oder „Wert mit " nur). Ich zugegriffen diese Attribute durch diese Codes:

for (var i=0; i<doc.attributeCollection.attributeArray.length; i++) { 
    if (doc.attributeCollection.attributeArray[i].name) { 
     name = doc.attributeCollection.attributeArray[i].name; 
    } 
    if (doc.attributeCollection.attributeArray[i].value) { 
     value = doc.attributeCollection.attributeArray[i].value; 
    } 
} 

Es funktioniert, wenn ich contentindex = name + " "+ value verwenden; Der Inhalt zeigt "Web Type Improper Limitation of Authentication". Wenn ich jedoch nur Wert contentindex = value verwende, funktioniert es nicht, es zeigt null.

Ich weiß, dass die Struktur von "Wert" Array (Array mit 1 Element) mag und es keinen Attributnamen hat.

Wie kann ich auf den Wert richtig zugreifen?

Update:

Wenn ich Index einige Fälle, wie:

1. Es funktioniert

var content=name + " " + value; index("default", content);

2. Es funktioniert

index("default", name);

3. Es funktioniert nicht

index("default", value);

4.Ich mit festen durch den Code überarbeitet "Wert" zu erhalten:

 if (doc.attributeCollection.attributeArray[i].value) { 

    for (var j=0; j<doc.attributeCollection.attributeArray[i].value.length; j++){ 
     value = doc.attributeCollection.attributeArray[i].value[j]; 
     } 
    } 

Oder

if (doc.attributeCollection.attributeArray[i].value) { 
     value = doc.attributeCollection.attributeArray[i].value[0]; 
} 

Es funktioniert wit h index("default", value);

Wenn jedoch i Permutation Funktion verwendet, wie diskutiert in this post

5. Es funktioniert

var content= permuteword(name); 
    for(var k=0; k<content.length; k++){ 
     index("default", content[k], { store : true }); 
    } 

6. Es ist nicht

var content= permuteword(value); 
    for(var k=0; k<content.length; k++){ 
     index("default", content[k], { store : true }); 
    } 

funktioniert 7. Es funktioniert nicht

var content=name + " " +value; 
var content1= permuteword(content); 
    for(var k=0; k<content1.length; k++){ 
     index("default", content1[k], { store : true }); 
    } 

Antwort

1

Ich bin nicht genau sicher, dass ich Ihre Frage vollständig verstehe.Es klingt wie Sie einen Index wie folgt erstellen:

for (var i=0; i<doc.attributeCollection.attributeArray.length; i++) { 
    if (doc.attributeCollection.attributeArray[i].name) { 
     name = doc.attributeCollection.attributeArray[i].name; 
    } 
    if (doc.attributeCollection.attributeArray[i].value) { 
     value = doc.attributeCollection.attributeArray[i].value; 
    } 
    index("contentindex", name + " " + value); 
}  

Wenn dies der Fall ist separat Indizierung der Name und der Wert könnte versuchen (aktualisieren: geändert jedes Element im Wert Array zuzugreifen):

for (var i=0; i<doc.attributeCollection.attributeArray.length; i++) { 
    if (doc.attributeCollection.attributeArray[i].name) { 
     name = doc.attributeCollection.attributeArray[i].name; 
     index("contentindex", name); 
    } 
    if (doc.attributeCollection.attributeArray[i].value) { 
     for (var j=0; j<doc.attributeCollection.attributeArray[i].value.length; j++) { 
      value = doc.attributeCollection.attributeArray[i].value[j]; 
      index("contentindex", value); 
     } 
    } 
} 

Dann Abfrage durch den Namen oder den Wert sollte das richtige Ergebnis zurückgeben.

Bitte lassen Sie mich wissen, wenn ich Sie Frage falsch verstehe.

+0

Ich aktualisierte mein Thema –

+0

Der "Wert" wird in Zeichenfolge zurückgegeben, aber warum es in Fall 6 und 7 nicht funktioniert. –

+0

Ist "Wert" immer eine Zeichenfolge? Es wird wahrscheinlich nicht funktionieren, wenn es ein Array ist - was es sein wird, wenn Sie es auf doc.attributeCollection.attributeArray [i] .value setzen. Haben Sie Probleme, wenn Sie den Wert im Array und nicht das Array selbst verwenden? – markwatsonatx