2016-04-10 3 views
1

Я новичок в поиске elastics и пытаюсь использовать elasticsearch, поиск api.Elasticsearch индекс ограничения по типу

Моя индексная структура состоит из типов деревьев. Скажем foo, bar и baz. Все типы деревьев имеют одинаковое «имя» с строковыми значениями, и я пытаюсь найти все типы, но просто извлекаю максимум 5 элементов каждого типа.

Я думаю, что мне удалось использовать Multi Search API; Интересно, могу ли я поддерживать одну и ту же функциональность с единственным запросом (для лучшей производительности).

Я искал в Интернете столько, сколько смогу. Однако я не мог найти лучшего способа. В stackoverflow есть ответ с аналогичным вопросом, который также предлагает многопользовательский поиск api; но ему два года, и к нему прилагается проблема. Я подумал, что снова нужно спросить.

Вот msearch я использую в данный момент:

{"type" : "foo"} 
{"query" : {"match": {"name": "bar"}}, "terminate_after": 5} 
{"type" : "bar"} 
{"query" : {"match": {"name": "bar"}}, "terminate_after": 5} 
{"type" : "baz"} 
{"query" : {"match": {"name": "bar"}}, "terminate_after": 5} 

Я думаю, что будет проверять все системы хранения данных в 3 раза, если я пишу запрос с макс 4 результатов.

Любая помощь приветствуется.

+0

Какова основная причина, почему вы хотите изменить свой мульти-поисковый запрос, если он работает? Это слишком медленно? – Val

+0

@Val Вы знаете, это инженерная проблема. Я пытаюсь оптимизировать, а также знаю и могу. –

+0

Достаточно честный, мне было просто любопытно ;-) – Val

ответ

1

агрегация с помощью _type, а затем найти топ-5 от каждого:

GET /index/_search 
{ 
"size": 0, 
"query": { 
    "match": { 
    "name": "bar" 
    } 
}, 
"aggs": { 
    "group_by_type": { 
    "terms": { 
     "field": "_type" 
    }, 
    "aggs": { 
     "top_5_aggregation": { 
      "top_hits":{ 
       "size" :5 
      } 
      } 
     } 
    } 
    } 
} 
+0

Очень красивый, чистый, «скопируйте - вставьте - посмотрите, как он работает». Благодарю. –

Смежные вопросы