2016-10-25 7 views
1

В моем отображении документа, у меня есть вложенные поля объекта следующегоПолучить значение поля из inner_hits отфильтрованного объекта ошибки броска

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

У меня есть длинный DSL запрос, в котором один из фильтров:

{ 
    "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" 
       } 
      } 
      } 
     ] 
     } 
    } 
    } 
} 

Я пытаюсь использовать inner_hits, чтобы получить объект выбранные периоды и возвращает что-то вроде этого:

{ 
    "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 
        } 
       } 
       ] 
      } 
      } 
     } 
     } 
    ] 
    } 
} 

Моя цель состоит в том, чтобы использовать одну из отметок от выбранного объекта в inner_hits для вычисления оценки. Поскольку объект доступности может иметь несколько объектов, но ВСЕГДА будет только один, соответствующий моим критериям поиска. Так что это то, что я, как мой запрос:

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... 
    } 
    ] 
} 

Но когда я использую выше сценарий, я получаю следующее сообщение об ошибке:

{ 
    "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": [] 
    } 
} 

Как получить selected_availabilities age поле в расчете баллов? Любая помощь будет высоко оценена.

+0

имеют очень похожий вопрос ... Вы работали это в конце концов? – gsaslis

+1

Нет, в конце концов я нашел, это невозможно :( – JVK

ответ

0

Попробуйте использовать

return (doc['inner_hits']... 

вместо

return (inner_hits... 
+0

Пробовал, но не работал. 'Doc' не может получить доступ к' inner_hits', так как он находится вне – JVK

+0

что делать, если вы просто используете 'doc ['age']'? – deathyr

+0

это тоже не работает – JVK

 Смежные вопросы

  • Нет связанных вопросов^_^