2017-02-22 2 views
0

Ich habe seit Stunden mit diesem Problem zu kämpfen. Ich versuche, benutzerdefinierte Punktzahl in meiner Suche mit Skript-Score (groovy) zu implementieren.Elasticsearch: Kein Feld im Mapping während der Ausführung des Scoreditors gefunden

Mapping:

{ 
"properties": { 
    "m_skill": { 
     "properties": { 
      "actual_period": { 
       "type": "long" 
      }, 
      "area_display": { 
       "type": "string" 
      }, 
      "c": { 
       "type": "double" 
      }, 
      "capability": { 
       "type": "string" 
      }, 
      "capability_display": { 
       "type": "string" 
      }, 
      "order_wt": { 
       "type": "double" 
      }, 
      "skillarea": { 
       "type": "string" 
      }, 
      "star_wt": { 
       "type": "double" 
      }, 
      "w": { 
       "type": "double" 
      } 
      } 
     } 
    }, 
    "personid": { 
     "type": "string" 
    }, 
    date_of_creation": { 
     "type": "long" 
    }, 
    "phone": { 
     "properties": { 
      "c": { 
       "type": "long" 
      }, 
      "v": { 
       "type": "string" 
      } 
     } 
    } 
} 

(m_skill ist ein Array)

Abfrage:

{"match_all":{}} 

Score Skript:

return doc['m_skill'].values.star_wt.sum() 

Fehler:

Aber ich bekomme keine Ausnahme, wenn ich das gleiche mit "date_of_creation" versuche. Ich habe einige Leute gefunden, die über das gleiche Thema sprechen, aber kaum ein Beitrag hat Antworten. Hat jemand ein Problem wie dieses gesehen? Was mache ich falsch?

Eine andere Frage, meine Formel ist so komplex, dass ich oben geschrieben habe. In einer einfachen Sprache ist es wie wenn ein Benutzer nach einer Reihe von Fähigkeiten fragt Ich suche nach Dokumenten mit abgefragten Fähigkeiten und abhängig von ihrem star_wt vergebe ich ihnen eine Punktzahl, die verwendet wird, um die endgültige Ergebnismenge zu sortieren. Ist es eine gute Idee, dasselbe mit elasticsearch custom score zu implementieren?

Jede Hilfe wird sehr begrüßt.

Antwort

0

In Ihrem Mapping fehlt ein Anführungszeichen für "date_of_creation". Dies kann das Problem für Sie verursachen. Ich habe das Mapping mit validiertem JSON in dieser Antwort für Sie hinzugefügt.

{ 
    "properties":{ 
     "m_skill":{ 
     "properties":{ 
      "actual_period":{ 
       "type":"long" 
      }, 
      "area_display":{ 
       "type":"string" 
      }, 
      "c":{ 
       "type":"double" 
      }, 
      "capability":{ 
       "type":"string" 
      }, 
      "capability_display":{ 
       "type":"string" 
      }, 
      "order_wt":{ 
       "type":"double" 
      }, 
      "skillarea":{ 
       "type":"string" 
      }, 
      "star_wt":{ 
       "type":"double" 
      }, 
      "w":{ 
       "type":"double" 
      } 
     } 
     } 
    }, 
    "personid":{ 
     "type":"string" 
    }, 
    "date_of_creation":{ 
     "type":"long" 
    }, 
    "phone":{ 
     "properties":{ 
     "c":{ 
      "type":"long" 
     }, 
     "v":{ 
      "type":"string" 
     } 
     } 
    } 
} 
+2

Danke Donglecow für die Mühe, aber ich endlich herausgefunden, das Problem. Es war nicht das Feld date_of_creation. Ich habe versucht, auf "Objekt" in "Doc" zuzugreifen, was nicht möglich ist, da alles, was es mir geben kann, Variablen ist. doc ['m_skill.skillarea'] hat es geschafft. –

Verwandte Themen