2016-03-30 8 views
5

Ich versuche Skriptfelder in meiner Abfrage zu verwenden. Ich habe das Sandbox-Scripting aktiviert und versucht, einen Ausdruck zu verwenden, um ein neues Feld zu berechnen.Skriptfeld mit Ausdruck - Es kann nur auf die Elementvariable [Wert] oder auf die Elementmethoden zugegriffen werden

Die Sache ist ich die folgende Fehlermeldung erhalten:

{ 
    "type": "expression_script_compilation_exception", 
    "reason": "Only the member variable [value] or member methods may be accessed on a field when not accessing the field directly" 
} 

Es scheint, dass nur „Wert“ zugänglich ist. Was fehlt mir hier?

Bei der Ausführung der folgenden Abfrage:

{ 
    "query": { 
    "match_all": {} 
    }, 
    "script_fields" : { 
    "field1" : { 
     "script" : { 
      "lang": "expression", 
      "inline": "doc['about.hobbies'].empty" 
     } 
    } 
    } 
} 

Mapping:

{ 
    "my_index": { 
    "mappings": { 
    "type": { 
     "properties": { 
      "about": { 
       "properties": { 
       "hobbies": { 
        "type": "string", 
        "analyzer": "lowercase" 
       } 
       } 
      } 
     } 
    } 
    } 
} 

Kleine Erklärung: Ich habe ein Feld, das die Liste von String-Werte enthalten.

"hobbies": ["a","b",c"] 

und es kann auch leer sein. Ich möchte ein Skriptfeld vom Typ boolean haben, das den Wert true hat, wenn die Liste nicht leer ist, und false, wenn die Liste leer ist.

aktualisieren: etwas mehr Lesen, ich diese Dokumentation stoßen auf lucene expressions scripts

There are a few limitations relative to other script languages:

  • Only numeric fields may be accessed
  • Stored fields are not available
  • If a field is sparse (only some documents contain a value), documents missing the field will have a value of 0

Mein Feld vom Typ String ist, könnte es das Problem sein? Wenn ja, gibt es eine andere Möglichkeit, Skriptfelder basierend auf Zeichenfolgenfeldern zu verwenden? vielleicht mit groovy?

+0

PLease die Zuordnung teilen .. – Richa

+0

Dank @Richa. Aktualisiert. – Tomer

Antwort

1

Ich denke, das Problem ist, dass das Feld ein verschachteltes Objekt ist, wenn ich die Dokumente richtig lese, dann unterstützt doc ['field'] nur einfache Begriffsfelder.

Note, however, that the doc[...] notation only allows for simple valued fields (can’t return a json object from it) and makes sense only on non-analyzed or single term based fields.

jedoch hat mit _Source arbeitete für mich

"script_fields" : { 
     "field1" : { 
      "script" : "_source.about.hobbies.size() > 0" 
     } 
    }, 
+0

Ich denke, dass einfach bewertete Felder, beziehen sich auf den Wert, nicht auf das Feld selbst. Also ich glaube nicht, dass das hier das Problem ist. Quelle ist immer eine Option, die Sache ist, dass es viel weniger effizient ist, weil diese Daten nicht im Speicher gefunden werden und abgerufen werden müssen, was ziemlich teuer ist. – Tomer

Verwandte Themen