Probleme mit der has_parent-Abfrage, die den scripted function_score enthält

Ich habe zwei Dokumenttypen in einer Eltern-Kind-Beziehung:

"myParent" : {
  "properties" : {
    "weight" : {
      "type" : "double"
    }
  }
}

"myChild" : {
  "_parent" : {
    "type" : "myParent"
  },
  "_routing" : {
    "required" : true
  }
}

Dasweight Das Feld wird für die benutzerdefinierte Bewertung / Sortierung verwendet. Diese Abfrage direkt gegen die übergeordneten Dokumente funktioniert wie beabsichtigt:

{
  "query" : {
    "function_score" : {
      "script_score" : {
        "script" : "_score * doc['weight'].value"
      }                 
    }                                                                       
  }    
}

Wenn Sie jedoch versuchen, eine ähnliche Bewertung für die untergeordneten Dokumente mit einemhas_parent Abfrage, ich erhalte eine Fehlermeldung:

{
  "query" : {
    "has_parent" : {
      "query" : {
        "function_score" : {                                                    
          "script_score" : {
            "script" : "_score * doc['weight'].value"
          }
        }
      },
      "parent_type" : "myParent",
      "score_type" : "score"
    }
  }
}

Der Fehler ist:

QueryPhaseExecutionException [[myIndex] [3]: Abfrage [gefiltert (ParentQuery [myParent] (gefiltert (Funktionsbewertung (ConstantScore (:), function = script [_score * doc ['weight']. value], params [null])) -> cache (_type: myParent)) -> cache (_type: myChild)], from [0], size [10]: Abfrage fehlgeschlagen [Umschreiben des Kontexts fehlgeschlagen]]; verschachtelt: ElasticSearchIllegalArgumentException [Kein Feld für [weight] im Mapping mit den Typen [myChild] gefunden];

Anstatt die Bewertungsfunktion auf das übergeordnete Element anzuwenden und das Ergebnis dann an das untergeordnete Element zu übergeben, versucht ES anscheinend, die Bewertungsfunktion selbst auf das untergeordnete Element anzuwenden, wodurch der Fehler verursacht wird.

Wenn ich nicht benutzescore zumscore_typetritt der Fehler nicht auf, obwohl die Ergebniswerte dann alle sind1.0, wie dokumentiert.

Was vermisse ich hier? Wie kann ich diese untergeordneten Dokumente mit einer benutzerdefinierten Bewertung basierend auf einem übergeordneten Feld abfragen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage