2016-04-11 4 views
1

Ich habe Suchindex für Beispiel-DB erstellt und führen Sie eine Suchabfrage in Cloudant scussessfully. Zum Beispiel hatte ich eine Datenbank wie:Erstellen Suchindex für Json in Cloudant

{ 
    "_id": "aardvark", 
    "_rev": "3-fe45a3e06244adbe7ba145e74e57aba5", 
    "min_weight": 40, 
    "max_weight": 65, 
    "min_length": 1, 
    "max_length": 2.2, 
    "latin_name": "Orycteropus afer", 
    "wiki_page": "http://en.wikipedia.org/wiki/Aardvark", 
    "class": "mammal", 
    "diet": "omnivore" 
} 

für die Indizierung "_id" oder "Klasse" i-Suchindex erstellen kann, wie:

function(doc){ 
    index("default", doc._id); 
... 
} 

oder

function(doc){ 
    index("default", doc.class); 
... 
} 

Aber ich weiß nicht, wie man auf Json-Format indiziert. Zum Beispiel habe ich ein JSON-Format als:

"_id": "08ff683d86484139", 
    "_rev": "4-cf6f34c6a2a22780a646b86a3f8d1848", 
    "lastUpdated": "2014-01-31 00:00:00", 
    "issueId": 62655, 
    "isThirdParty": true, 
    "dateCreated": "2014-01-29 00:00:00", 
    "attributeCollection": { 
    "attributeArray": [ 
     { 
     "updateable": false, 
     "lookup": "issuetype", 
     "issueAttributeDefinitionId": 13, 
     "attributeType": 1, 
     "name": "Web Type", 
     "value": [ 
      "Improper Neutralization of Input During Web Page Generation" 
     ] 
     }, 
"appReleaseId": 57, 
    "hash": "953b33eca52938ab2d21e27eb171998b" 
} 

Meine Frage ist, wie Eigenschaften Index in "Attributen" von JSON-Format. Insbesondere, wie man Index für

"name": "Web Type", 

und

"value": ["Improper Neutralization of Input During Web Page Generation"] 
+0

Nguyen, ich nehme an, dass der Anwendungsfall, den Sie zu lösen versuchten, im Zusammenhang mit dem Filtern nach Name und/oder Wert stand. Ich habe eine Lösung dafür unten zur Verfügung gestellt, aber es verwendet keine "json" Indizes. Wenn die folgende Antwort Ihren Anwendungsfall nicht löst, teilen Sie mir bitte mit, wo es fehlt. Vielen Dank! – markwatsonatx

Antwort

2

Ich glaube nicht, Sie einen json-Index auf ein Array-Feld eines Teildokument erstellen können, aber Sie können einen Suchindex für die Abfrage erstellen Die Felder name und value basieren auf Ihrer Dokumentstruktur.

  1. Im Cloudant Armaturenbrett Ihre Datenbank auswählen, tippen Sie auf die + Design-Dokumente neben und wählen Neue Suche Index.
  2. Geben Sie einen Namen für das Design-Dokument (ex _Design/Attribute.)
  3. für den Index einen Namen angeben
  4. für die Index-Funktion die folgende Eingabe (ex by_name_value.):

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

Sie können Abfragen für diesen Index wie folgt auszugeben:

https://<yourcloudanthost>/<databasename> 
/_design/attributes 
/_search/by_name_value 
?limit=10 
&q=name:%27Web+Type%27+OR+value:%27Improper%20Neutralization%20of%20Input%20During%20Web%20Page%20Generation%27 
&include_docs=true 

Hinweis: Attribute ist der Name des Dokuments Design in Schritt 2 angegeben und by_name_value ist der Name des Index in Schritt 3 angegeben

Die Abfrage decodiert:

&q= 
    name:'Web Type' 
    OR 
    value:'Improper Neutralization of Input During Web Page Generation' 

Hier ist ein Beispielantwort für diese Abfrage:

{ 
    "total_rows":1, 
    "bookmark":"g2wAAAABaANkAChkYmNvcmVAZGIyLmJtLWRhbC1zdGFuZGFyZDIuY2xvdWRhbnQubmV0bAAAAAJiQAAAAGJf____amgCRj9_92eAAAAAYQBq", 
    "rows":[ 
     { 
     "id":"08ff683d86484139", 
     "order":[ 
      0.0078043024986982346, 
      0 
     ], 
     "fields":{ 
      "name":"Web Type", 
      "value":"Improper Neutralization of Input During Web Page Generation" 
     }, 
     "doc":{ 
      "_id":"08ff683d86484139", 
      "_rev":"1-f4f6b73bbf3420412a5619e74f4cae00", 
      "lastUpdated":"2014-01-31 00:00:00", 
      "issueId":62655, 
      "isThirdParty":true, 
      "dateCreated":"2014-01-29 00:00:00", 
      "attributeCollection":{ 
       "attributeArray":[ 
        { 
        "updateable":false, 
        "lookup":"issuetype", 
        "issueAttributeDefinitionId":13, 
        "attributeType":1, 
        "name":"Web Type", 
        "value":[ 
         "Improper Neutralization of Input During Web Page Generation" 
        ] 
        } 
       ] 
      }, 
      "appReleaseId":57, 
      "hash":"953b33eca52938ab2d21e27eb171998b" 
     } 
     } 
    ] 
} 

Sie können mehr darüber erfahren, wie hier erstellen und Abfrage Suchindizes:

https://docs.cloudant.com/search.html#