2016-10-25 2 views
1

In meinem Mapping-Dokument, ich habe ein verschachtelten Objektfelder wieinner_hits gefilterte Objekt throw Fehler

folge
"availabilities":{      
    "type": "nested",      
    "dynamic": "strict",      
    "properties": {      
    "start":      { "type": "date", "format": "yyyy-MM-dd" }, 
    "end":       { "type": "date", "format": "yyyy-MM-dd" }, 
    "age":       { "type": "integer"       } 
    }      
} 

Ich habe eine lange DSL-Abfrage, bei dem eines des Filter ist:

{ 
    "nested": { 
    "path": "availabilities", 
    "inner_hits" : { 
     "size": 1, 
     "name": "selected_availabilities" 
    }, 
    "query": { 
     "bool": { 
     "must": [ 
      { 
      "range": { 
       "availabilities.start": { 
       "gte": "2016-10-08", 
       "lte": "2016-10-08" 
       } 
      } 
      }, 
      { 
      "range": { 
       "availabilities.end": { 
       "gte": "2016-10-17", 
       "lte": "2016-10-17" 
       } 
      } 
      } 
     ] 
     } 
    } 
    } 
} 

ich versuche inner_hits zu verwenden die ausgewählten Verfügbarkeit Objekt zu erhalten und das gibt so etwas wie dieses:

{ 
    "took": 5, 
    "timed_out": false, 
    "_shards": { 
    "total": 5, 
    "successful": 5, 
    "failed": 0 
    }, 
    "hits": { 
    "total": 1, 
    "max_score": 6000, 
    "hits": [ 
     { 
     "_index": "listings_v1", 
     "_type": "listing", 
     "_id": "228527", 
     "_score": 6000, 
     "_source": { 
      ...my fields.... 
      ...my fields.... 
      ...my fields.... 
      ...my fields.... 
      ...availabilities has nested objects..... 
     }, 
     "inner_hits": { 
      "selected_availabilities": { 
      "hits": { 
       "total": 1, 
       "max_score": 1.4142135, 
       "hits": [ 
       { 
        "_type": "listing", 
        "_id": "228527", 
        "_nested": { 
        "field": "availabilities", 
        "offset": 3 
        }, 
        "_score": 1.4142135, 
        "_source": { 
        "start": "2016-10-08", 
        "end": "2016-10-17", 
        "age": 23 
        } 
       } 
       ] 
      } 
      } 
     } 
     } 
    ] 
    } 
} 

Mein Ziel ist es, eine der Dateien aus dem ausgewählten Objekt in den inneren_Hits für die Berechnung der Punktzahl zu verwenden. Da Verfügbarkeitsobjekte mehrere Objekte haben können, wird IMMER immer nur eines sein, das meinen Suchkriterien entspricht. SO ist es das, was ich als meine Frage habe:

function_score": { 
    "query": {}, 
    "score_mode": "sum", 
    "boost_mode": "replace" 
    "functions": [ 
    { 
     "script_score": { 
     "params": { 
      "move_in_date_boost": -1350, 
      "desired_move_in_date": "2016-11-03" 
     }, 
     "script": "return (inner_hits['selected_availabilities']['hits']['hits'][0]['_source']['age']);" 
     } 
    }, 
    { 
     ....more functions... 
    } 
    ] 
} 

Aber wenn ich oben Skript verwenden, erhalte ich folgende Fehlermeldung:

{ 
    "took": 239, 
    "timed_out": false, 
    "_shards": { 
    "total": 5, 
    "successful": 4, 
    "failed": 1, 
    "failures": [ 
     { 
     "shard": 0, 
     "index": "xyz_v1", 
     "node": "hgu7no8oo9wwe34wetw", 
     "reason": { 
      "type": "script_exception", 
      "reason": "failed to run inline script [return (inner_hits['selected_availabilities']['hits']['hits'][0]['_source']['age']);] using lang [groovy]", 
      "caused_by": { 
      "type": "missing_property_exception", 
      "reason": "missing_property_exception: No such property: inner_hits for class: 572da4fc5f5e591a0d7cfec2cde0c998b550b1f4" 
      } 
     } 
     } 
    ] 
    }, 
    "hits": { 
    "total": 0, 
    "max_score": null, 
    "hits": [] 
    } 
} 

Wie selected_availabilities age Feld in Score-Berechnung bekommen? Jede Hilfe wird sehr geschätzt werden.

+0

haben ein sehr ähnliches Problem zu verwenden, ... haben Sie gearbeitet es am Ende aus? – gsaslis

+1

Nein, schließlich fand ich, es ist nicht möglich :( – JVK

Antwort

0

Try

return (doc['inner_hits']... 

statt

return (inner_hits... 
+0

Versucht, aber hat nicht funktioniert. 'Doc' kann nicht auf' inner_hits' zugreifen, da es außerhalb – JVK

+0

ist, wenn Sie nur 'doc ['age']'? – deathyr

+0

verwenden das funktioniert auch nicht – JVK