2016-04-10 16 views
1

私はelasticsearchを初めて使用しています。私はelasticsearch、search apiを使用しようとしています。タイプによる弾性検索の検索インデックスの制限

私のインデックス構造はツリータイプで構成されています。 foo,barおよびbazと言う。すべてのツリータイプは文字列値と同じ '名前'キーを持ち、私が達成しようとしているのはすべてのタイプを検索するだけですが、各タイプの最大5つのアイテムを検索します。

しかし、私はMulti Search APIで成功したと思います。代わりに(より良いパフォーマンスのために)単一のクエリで同じ機能を維持できるかどうかと思います。

私は可能な限りインターネットを検索しました。しかし、私はより良い方法を見つけることができませんでした。 stackoverflowには同様の質問があり、複数の検索APIも用意されています。 2歳で問題が付いています。もう一度聞いてみると意味があると思いました。私は、最大4つの結果でクエリを書く場合には、すべてのストレージを3回チェックすると思う

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

:ここ

は私が現時点で使用していmsearchです。

助けてください。

+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

非常に素晴らしい、きれいな、「コピー貼り付ける - それを働かせなさい」答え。ありがとう。 –

関連する問題