2016-04-10 23 views
1

Ben elasticsearch için yeni ve elasticsearch, api arama kullanmaya çalışıyorum.Elasticsearch search index türüne göre limit

Dizin yapmam ağaç türlerinden oluşur. foo, bar ve baz deyin. Tüm ağaç türleri, dize değerleri ile aynı 'isim' anahtarına sahiptir ve elde etmeye çalıştığım şey, her türünü aramaktır, ancak her türden en fazla 5 öğeyi almaktır.

Ancak, Multi Search API ile başarılı olduğumu düşünüyorum; Aynı işlevseli yerine tek bir sorgu ile devam edip edemeyeceğimi merak ediyorum (daha iyi performans için).

İnterneti olabildiğince çok araştırdım. Ancak daha iyi bir yol bulamadım. Aynı zamanda çoklu arama api sunan benzer bir soruyla stackoverflow'ta bir cevap var; ama iki yaşında ve ona bağlı bir sorun var. Tekrar sormanın anlamlı olduğunu düşündüm. Ben en fazla 4 sonuçlarla bir sorgu yazarsanız hepsi toplama birimi 3 kez kontrol edecek düşünüyorum

{"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} 

: Burada

şu anda kullanıyorum msearch olduğunu.

Herhangi bir yardım için teşekkür ederiz.

+0

çalıştığını eğer çok arama sorgusunu değiştirmek istiyorum neden altta yatan nedeni nedir? Çok mu yavaş? – Val

+0

@Val Biliyorsunuz, bu bir mühendislik problemidir. Bildiğim kadar iyi bir şekilde optimize etmeye çalışıyorum. –

+0

Yeterince adil, sadece merak ettim ;-) – Val

cevap

1

Toplama _type kullanarak ve sonra her birinden ilk 5'ine bulmak:

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

Çok güzel, temiz, 'kopyala - yapıştır - izle' cevabı. Teşekkürler. –