Dans mon document de cartographie, j'ai un champs d'objets imbriqués comme suitRécupérer une valeur de champ de inner_hits objet filtré d'erreur de jet
"availabilities":{
"type": "nested",
"dynamic": "strict",
"properties": {
"start": { "type": "date", "format": "yyyy-MM-dd" },
"end": { "type": "date", "format": "yyyy-MM-dd" },
"age": { "type": "integer" }
}
}
J'ai une longue requête DSL, dans lequel l'un des filtres est:
{
"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"
}
}
}
]
}
}
}
}
Je suis en train d'utiliser inner_hits
pour obtenir les disponibilités objets sélectionnés et qui renvoie quelque chose comme ceci:
{
"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
}
}
]
}
}
}
}
]
}
}
Mon but est d'utiliser l'un des champs de l'objet sélectionné dans les inner_hits pour le calcul de la partition. Puisque l'objet disponibilités peut avoir plusieurs objets, mais il y en aura TOUJOURS un seul correspondant à mes critères de recherche. Voilà donc ce que j'ai que ma requête:
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...
}
]
}
Mais quand je l'utilise au-dessus de script, je reçois l'erreur suivante:
{
"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": []
}
}
Comment obtenir selected_availabilities age
champ dans le calcul du score? Toute aide sera grandement appréciée.
une question très similaire ... avez-vous travaillé dehors à la fin? – gsaslis
Non, finalement j'ai trouvé, ce n'est pas possible :( – JVK