Elasticsearch Фильтр динамических вложенных полей с агрегацией - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть товары с динамическими атрибутами (фильтры).Мне нужно получить динамическое число для каждого значения для фильтра в соответствии с поисковым запросом.

У меня есть следующее отображение для индекса товаров:

{  
   "products":{  
      "mappings":{  
         "properties":{  
            ...
            "dynamicFilters":{  
               "type":"nested",
               "properties":{  
                  "name":{  
                     "type":"keyword"
                  },
                  "value":{  
                     "type":"keyword"
                  }
               }
            },
            ...
         }
      }
   }
}

И следующий запрос агрегации:

'size': 0,
'query': {
    'bool': {
        'must': {
            'match': {
                'category': 'Notebooks'
            }
        },
        'filter': {
            {'nested': {
                'path': 'dynamicFilters',
                'query': {
                    'bool': {
                        'filter': {
                            {'term': {'dynamicFilters.name': 'processor'}},
                            {'terms': {'dynamicFilters.value': {'Ryzen 7'}}},
                        },
                    }
                }
            },
        }
    }
},

'aggs': {
    //'dynamicFilters': {
        //'global': {},   <-- global type commented here
        //'aggs': {
            'dynamicFilters': {
                'nested': {
                    'path': 'dynamicFilters',
                },
                'aggs': {
                    'name': {
                        'terms': {
                            'field': dynamicFilters.name',
                            'size': 20
                        },
                        'aggs': {
                            'value': {
                                'terms': {
                                    'field': 'dynamicFilters.value',
                                    'size': 20
                                }
                            }
                        }
                    },
                }
            },
        //}
    //}
},

Проблема в том, что в поисковом запросе будет включен фильтр, например, «proccesor» со значением «Ryzen 7» - в ответ не будет произведено агрегирование для всех «процессорных» значений, кроме «Ryzen 7».

Я пытался заставить эту работу работать с global type, но в этом случае aggs перестает работать с поисковым запросом и возвращает все существующие значения для значений.

Любая помощь будет высоко оценена., спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...