Для того чтобы пройти по всем вложенным параметрам в фильтре в Elasticsearch, можно использовать оператор `nested`. Например, если ваш фильтр выглядит следующим образом:
```json
{
"query": {
"nested": {
"path": "nested_field",
"query": {
"bool": {
"must": [
{ "term": { "nested_field.param1": "value1" } },
{ "term": { "nested_field.param2": "value2" } }
]
}
}
}
}
}
```
вы можете использовать оператор `filter` для фильтрации данных с параметром `locationId`:
```json
{
"query": {
"bool": {
"must": { "match_all": {} },
"filter": [
{ "term": { "locationId": "your_location_id" } },
{
"nested": {
"path": "nested_field",
"query": {
"bool": {
"must": [
{ "term": { "nested_field.param1": "value1" } },
{ "term": { "nested_field.param2": "value2" } }
]
}
}
}
}
]
}
}
}
```
Таким образом, вы сможете фильтровать данные по `locationId` и другим вложенным параметрам в Elasticsearch.
Чтобы улучшить данную часть кода и правильно фильтровать цены в зависимости от наличия параметра `locationId`, вы можете добавить проверку на присутствие параметра `locationId` перед фильтрацией. Например:
```json
{
"query": {
"bool": {
"must": { "match_all": {} },
"filter": [
{
"exists": { "field": "locationId" }
},
{
"nested": {
"path": "nested_field",
"query": {
"bool": {
"must": [
{ "term": { "nested_field.param1": "value1" } },
{ "term": { "nested_field.param2": "value2" } }
]
}
}
}
}
]
}
}
}
```
Таким образом, вы сможете правильно фильтровать цены в зависимости от наличия параметра `locationId`.