В моем отображении документа, у меня есть вложенные поля объекта следующегоПолучить значение поля из 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
поле в расчете баллов? Любая помощь будет высоко оценена.
имеют очень похожий вопрос ... Вы работали это в конце концов? – gsaslis
Нет, в конце концов я нашел, это невозможно :( – JVK