У меня есть индекс поиска elasticsearch, содержащий продукты, которые я могу запросить для разных условий поиска. Каждый продукт содержит поле shop_id
для ссылки на магазин, к которому принадлежит. Теперь я пытаюсь отобразить список всех магазинов, содержащих продукты для моего запроса. (Для фильтрации по магазинам) Насколько я читал по аналогичным вопросам, мне нужно использовать агрегацию. Наконец-то я построил этот запрос:Elasticsearch: Совокупные результаты запроса
curl -XGET 'http://localhost:9200/searchindex/_search?search_type=count&pretty=true' -d '{
"query" : {
"match" : {
"_all" : "playstation"
}
},
"aggregations": {
"shops_count": {
"terms": {
"field": "shop_id"
}
}
}
}'
Это должно искать playstation
и агрегировать результаты, основанные на shop_id
. К сожалению, он возвращает только
Данные слишком большие, данные будут больше предела [8534150348] байт].
Я также пробовал его с запросами, возвращающими только 2 результата. Индекс содержит более 90 000 000 продуктов.
Спасибо за ваше предложение. Это также приводит к ошибке памяти. У меня есть подозрение, что elasticsearch пытается выполнить агрегацию перед применением фильтра. Даже для запросов, возвращающих только 2 результата, это терпит неудачу. –
На самом деле фильтр фильтров агрегатов, затем агрегат (обратите внимание на вложение «aggs»). Возможно, это может помочь: https://stackoverflow.com/questions/25367420/elasticsearch-why-is-it-recommended-to-use-50-of-available-memory-for-the-hea – cheekybastard