2014-08-28 2 views
0

У меня есть индекс поиска 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 продуктов.

ответ

1

Я бы предложил, чтобы это было задание для агрегации фильтров.

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-bucket-filter-aggregation.html

Примечание: Я не знаю, ваше отображение продукта в индексе, так что если фильтр ниже не работает, попробуйте другой фильтр из http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-filters.html

{ 
    "aggs" : { 
     "in_stock_playstation" : { 
      "filter" : { "term" : { "change_me_to_field_for_product" : "playstation" } } }, 
      "aggs" : { 
       "shop_count" : { "terms" : { "field" : "shop_id" } } 
      } 
     } 
    } 
} 
+1

Спасибо за ваше предложение. Это также приводит к ошибке памяти. У меня есть подозрение, что elasticsearch пытается выполнить агрегацию перед применением фильтра. Даже для запросов, возвращающих только 2 результата, это терпит неудачу. –

+0

На самом деле фильтр фильтров агрегатов, затем агрегат (обратите внимание на вложение «aggs»). Возможно, это может помочь: https://stackoverflow.com/questions/25367420/elasticsearch-why-is-it-recommended-to-use-50-of-available-memory-for-the-hea – cheekybastard