2016-04-29 5 views
0

Ich habe ein Json Dokument in cloudant als:Hinzufügen von Funktionen im Suchindex von loudant

{ 
    "_id": "3-f812228f45b5f4e4962505561953ew245", 
    "_rev": "3-f812228f45b5f4e496250556195372b2", 
    "wiki_page": "http://en.wikipedia.org/wiki/African_lion", 
    "name": "african lion", 
    "class": "mammal", 
    "diet": "herbivore" 
} 

ich einen Suchindex erstellen möchte, die dieses Dokument suchen können, wenn ich Eingabe Abfragen als „afrian Löwe“ oder „Löwe afrikanisch ", ...

Ich mache eine Funktion, die alle Fälle von Permutation in" doc.name "für die Indizierung zurückgeben kann (Diese Funktion funktioniert gut und wurde auch in reiner JS-Umgebung überprüft). Allerdings funktioniert es nicht in Cloudant, die Ausgabe null zurückgeben, wenn ich eine Abfrage eingeben.

Dies ist ein Code, den ich in Suchindex gemacht:

function(doc){ 
    var list = []; 
    function permute(ss, used, res, level, list){ 
    if(level==ss.length&&res!==""){ 
     list.push(res); 
     return; 
    } 
    for(var i=0; i<ss.length; i++){ 
    console.log("loops"); 
     if (used[i]===true){ 
      continue; 
     } 

     if(level>=0){ 
      if (res!="" && list.indexOf(res)<0){ 
       list.push(res.trim()); 
      } 

      used[i]=true; 
      permute(ss, used, res+" "+ss[i], level+1, list) 
      used[i]=false; 
     } 
     } 
    } 
    function permuteword(s){ 
     var ss=s.split(" "); 
     var used = []; 
    var res = ""; 
    list = []; 
    permute(ss, used, res, 0, list); 
    console.log(list); 
    } 

    var contentIndex=[]; 
    contentIndex=permuteword("african lion"); 
    for(var i=0; i<contentIndex.length; i++){ 
    index("default", contentIndex[i]); 
    } 
} 

wie ich das Problem lösen kann?

Antwort

2

aktualisieren

Ihr Update sieht gut aus, aber es gibt noch ein Problem: Sie sind die Liste der permuteword Funktion nicht zurück. Ich glaube, dass Sie auch Anrufe zu console.log entfernen müssen. Nachdem ich diese beiden Dinge tat ich in der Lage war, es zu bekommen mit Cloudant arbeitet mit den folgenden Suchanfrage (Ich habe auch Ihren hartcodierte Anruf mit „afrikanischen Löwen“ zurück zu doc.name):

default:"african" 
default:"african lion" 
default:"lion" 
default:"lion african" 

Hier Skript ist der letzte:

function(doc){ 
    var list = []; 
    function permute(ss, used, res, level, list){ 
    if(level==ss.length&&res!==""){ 
     list.push(res); 
     return; 
    } 
    for(var i=0; i<ss.length; i++){ 
     if (used[i]===true){ 
      continue; 
     } 

     if(level>=0){ 
      if (res!="" && list.indexOf(res)<0){ 
       list.push(res.trim()); 
      } 

      used[i]=true; 
      permute(ss, used, res+" "+ss[i], level+1, list) 
      used[i]=false; 
     } 
     } 
    } 
    function permuteword(s){ 
    var ss=s.split(" "); 
    var used = []; 
    var res = ""; 
    list = []; 
    permute(ss, used, res, 0, list); 
    return list; 
    } 

    if (doc.name) { 
    var contentIndex=permuteword(doc.name); 
    for(var i=0; i<contentIndex.length; i++){ 
     index("default", contentIndex[i]); 
    } 
    } 
} 

Aktualisiert JSFiddle:

https://jsfiddle.net/14e7L3gw/1/

Original-Antwort

Ich glaube, es gibt Probleme mit Ihrem Javascript. Die permuteword Funktion gibt keine Ergebnisse zurück. Sehen Sie diese JSFiddle:

https://jsfiddle.net/14e7L3gw/

Hinweis: Ich habe einige Protokollierung und den Anruf zu indizieren Kommentar gesetzt. Führen Sie den Debugger Ihres Browsers aus, um die Ausgabe anzuzeigen.

Hier ist, was passiert:

  1. Der erste Aufruf von permuteword Anrufe permute(["african","lion"], [], "", 0, []);
  2. Die erste if in permuteword schlägt fehl, weil level (0) = ss.length() (2) und res == "!".
  3. Dann springt die Funktion durch ss, aber nie etwas tut, weil level = 0.
  4. Letztlich permuteword ein leeres Array zurückgibt, so wird nichts indiziert.
+0

Ich habe gerade die Codes durch Ersetzen der Rückgabe in Permuteword als Liste von globalen Variablen bearbeitet. Der Code funktioniert unter https://jsfiddle.net/bnb53qyd/2/. Aber es funktioniert immer noch nicht in Cloudant. –

+0

Wunderbar !, es funktioniert jetzt. –

Verwandte Themen