Добрый день
есть документ с nested полем
{ "_id": 111 "price": 1000 "properties": [ { "property_id": 22, "property_value": "газ"} { "property_id": 23, "property_value": "зеленый"} ] }
У меня есть запрос который выдает мне ожидаемый score за price (от 1 до 100).
Мне нужно добавить, +30 score если nested документ имеет param_id == 23 AND param_value == "красный". НО при этом, если в документе нет этого nested документа, то все равно возвращать документ, просто без этих +30 score
Пытался делать:
{ "query": { "nested": { "path": "properties", "query": { "function_score": { "query": { "bool": { // ищу конкретный nested документ "filter": [ { "term": { "properties.property_id": 13 } }, { "term": { "properties.property_value": "газированная" } } ] } }, "script_score": { "script": { "source": "30" // за каждый найденный возвращаю 30 score } } } } } } }, "sort": { "_score": { "order": "desc" } } } Результат: search_phase_execution_exception
Пытался:
{ "query": { "bool": { "must": [ [ { "nested": { "path": "properties", "query": [ { "function_score": { "functions": [ { "weight": 30 // +30 score за найденный документ "filter": [ // ищу конкретный nested документ { "term": { "properties.property_id": 13 } }, { "term": { "properties.property_value": "газированная" } } ] } ] } } ] } } ] ] } }, "sort": { "_score": { "order": "desc" } } } Результат: [_na] query malformed, must start with start_object
Пытался:
{ "query": { "bool": { "must": [ [ { "nested": { "path": "properties", "query": [ { "constant_score": { "filter": [ // ищем конкретный документ { "term": { "properties.property_id": 117 } }, { "term": { "properties.property_value": "вода" } } ], "boost": 3 // даем +30 score за найденный результат } } ] } } ] ] } }, "sort": { "_score": { "order": "desc" } } } Результат: возвращает документы где property_id == 117 AND property_value == "вода", но добавляет только 1 score в не зависимости от boost
Заранее благодарен