2016-04-11 14 views
1

1つのHTTPリクエストでElasticsearchから結果の複数のバケツを返そうとしています。Elasticseach Multisearchは1セットの結果しか返しません

私は_msearch APIを使用しています。

私は次のクエリを使用しています:クエリがエラーなしで実行されますが、結果は唯一、10チームのメンバーの1(2もshoul思わつのオブジェクトを返す

POST /_msearch 

{"index" : "[INDEXNAME]", "type":"post"} 
{"query" : {"match" : {"post_type":"team-member"}}, "from" : 0, "size" : 10} 
{"index" : "[INDEXNAME]", "type": "post"} 
{"query" : {"match" : {"post_type": "article"}}, "from" : 0, "size" : 10} 

、および10個の記事に1つ):

{ 
     "responses": [ 
      { 
       "took": 1, 
       "timed_out": false, 
       "_shards": { 
        "total": 4, 
        "successful": 4, 
        "failed": 0 
       }, 
       "hits": { 
        "total": 191, 
        "max_score": 3.825032, 
        "hits": [ 
         {...} 
        ] 
       } 
      }, // second query should be here, no? 
     ] 
    } 

私のクエリの構成は間違っているのですか、これがどう機能するか誤解していますか?

答えて

1

_msearch要求のフォーマットはbulk API formatに従わなければなりません。それはこのような何かを見なければならない:

header\n 
body\n 
header\n 
body\n 

ヘッダ部分は、インデックス/インデックスは上の検索するには、オプション(マッピング)のタイプをサーチするためにどのsearch_typepreference、およびrouting含まれています。本文には、一般的な検索対象のリクエスト(query,aggregationsfromsizeなどが含まれます)が含まれています。

注:最後のデータ行は、改行文字\nで終わる必要があります。

POST /_msearchの後に2つの改行が追加されたため、コードの例では、環境によってはこのクエリの形式に従ってください。クエリが機能する場合もあれば動作しない場合もあります。 responses配列に1つの結果しかない場合は、最後のクエリが何らかの形で破棄されます。その形式も確認してください。

+0

"注:データの最後の行は、改行文字で終わらなければなりません。\ n"トリックをやった - ありがとう! – psorensen

1

実際には問題はありませんが、「Bulk API」にチェックを入れてください。似ています。 https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html

+0

確かに、それは索引付け/削除のみであり、照会のためではないようです。 – psorensen

+1

あなたのリクエストに何か悪いことはありません。場合によっては、あなたのマッピングがこの可能性を提供しないため、ouは「マルチ検索要求」を行うことができません。私はあなたが集計で他の選択肢を取ることをお勧めします。 – DamienL

+0

ありがとうございます。ドキュメンテーションはマッピングについて何も言及していないようです。マルチサーチを可能にするために私のマッピングを設定する方法を概説するかもしれないリソースを指摘できますか? – psorensen

関連する問題