2017-02-18 16 views
1

elasticsearchサーバで複数のクエリを1回のリクエストで実行したい。具体的に私が何をしたいのか、次のクエリ(elastcisearch-PHP-クライアントである)1つのリクエストで2つのクエリを結合する

$params = [ 
        "index" => "bookydate", 
        "type" => "vendor_service", 
        "body" => [ 
         "query" => [ 
          "bool" => [ 
           "must" => [ 
            "term" => [ 
             "sys_service_id" => $request->input("sys_service_id") 
            ] 
           ], 
           "should" => [ 
            "geo_shape" => [ 
             "served_location" => [ 
              "shape" => [ 
               "type" => "point", 
               "coordinates" => [ 
                "{$request->input('loc_lon')}", 
                "{$request->input('loc_lat')}"] 
              ] 
             ] 
            ] 
           ] 
          ] 
         ] 
        ] 
       ]; 

を持ってもtrue"hole_country"フィールドを持っているすべての文書を取得します。

私はすでに試してみました、サーバーをElasticsearchとarray_mergeを持つ2つの結果を結合ますが、理由は複数のキーと同じキーを持つアレイ上のPHPの制限の機能しなかったために別の要求をすることです。

UPDATE

Elastcisearchは、IMが探して正確に何であるMultisearchと呼ばれる機能をサポートしています。問題は、php-clientがマルチサーチをサポートしていないので、リクエストを送信するためにGuzzleを使用する必要があることです。

Guzzle docsには、正しいリクエスト本文を構成する方法に関する完全な情報がありません。任意の情報

歓迎すでに私は、次の体を持っているが、あなたはElasticsearchのmultisearchのAPIを使用することができます不正な要求エラーに

$body = [ 
     ["index"=>"bookydate"], 
     ["query"=>["bool"=> ["must"=>[["term"=>["sys_service_id"=>"1"]],["geo_shape"=>["served_location"=>["shape"=>["type"=>"circle","coordinates"=>[25,3],"radius"=>"90km"]]]]]]]], 
     ["index"=>"bookydate"], 
     ["query"=>["bool"=>["must"=>["term"=>["hole_country"=>true]]]]] 
    ]; 

答えて

1

をelastcisearch returingています。これは、1回のPOSTリクエストですべてのクエリをJSON形式で追加することです。私はPHPクライアントがこれをサポートすることを願っています。そうしないと、手動でPOSTリクエストを行う必要があります。それはMulti Search APIを文書化していないが、

Multi-search API

+0

私にとってうまく、私のニーズに合っていれば、マルチサーチです。実際にPHPクライアントはmsearchをサポートしていないので、リクエストを送信するためにguzzleを使用しました。しかし、私は正しい体を送る方法についていくつかの問題に取り組まなければならない。私の更新を見てください – dios231

1

はelasticsearchのPHPクライアントによってサポートされています。 $params = [ 'body' => [ ["index" => "bookydate", "type" => "vendor_service"], ["query" => [ "bool" => [ "must" => [ "term" => [ "sys_service_id" => $request - > input("sys_service_id") ] ], "should" => [ "geo_shape" => [ "served_location" => [ "shape" => [ "type" => "point", "coordinates" => [ "{$request->input('loc_lon')}", "{$request->input('loc_lat')}" ] ] ] ] ] ] ]] ];

だからあなたの更新の構文を使用して正しいです:代わりにsearchコールmsearch、このようなグループは、クエリの

msearchに電話する必要があります。

関連する問題