質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Elasticsearch

Elasticsearchは、クラウド向けに構築された、RESTful な API を提供する分散型のサーチエンジンアプリケーションです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

0回答

837閲覧

AWS EC2とAWS Elasticsearchサービスにて、PHPよりElasticSearchのマルチ検索(msearch)の利用方法

HiroshTakayama

総合スコア10

Elasticsearch

Elasticsearchは、クラウド向けに構築された、RESTful な API を提供する分散型のサーチエンジンアプリケーションです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

2クリップ

投稿2019/06/11 05:13

編集2022/01/12 10:55

前提・実現したいこと

AWS EC2とAWS Elasticsearchサービスを利用して、PHPよりElasticSearchのマルチ検索(msearch)を利用したい。

発生している問題・エラーメッセージ

EalsticSearchのmsearch APIをPHPから利用しようと

以下のサイトを参考にコードを実装しました。

 https://discuss.elastic.co/t/elasticsearch-5-0-php-msearch/66716

queryは上記サイトから変更してあります。

PHP

1$client = ClientBuilder::create() 2 ->setHosts(['elasticsearch_endpoint']) 3 ->build(); 4 5 6 $msret = $client->msearch([ 7 'body' => [ 8 [ 9 'index' => 'myIndex', 10 'type' => 'myType', 11 ], 12 [ 13 'query' => [ 14 'match' => [ 15 'query' => '11111111', 16 'fields' => ['_id'] 17 ] 18 ] 19 ], 20 [ 21 'index' => 'myIndex', 22 'type' => 'myType', 23 ], 24 [ 25 'query' => [ 26 'match' => [ 27 'query' => '99999999', 28 'fields' => ['_id'] 29 ] 30 ] 31 ], 32 ] 33 ]); 34

実行後に以下のエラーログが掃きだされました。

 local.ERROR: {"error":{"root_cause":[{"type":"parsing_exception","reason":"[match] query doesn't support multiple fields, found [query] and [fields]","line":1,"col":57}],"type":"parsing_exception","reason":"[match] query doesn't support multiple fields, found [query] and [fields]","line":1,"col":57},"status":400} {"userId":["testuser",5],"exception":"[object] (Elasticsearch\Common\Exceptions\BadRequest400Exception(code: 400): {"error":{"root_cause":[{"type":"parsing_exception","reason":"[match] query doesn't support multiple fields, found [query] and [fields]","line":1,"col":57}],"type":"parsing_exception","reason":"[match] query doesn't support multiple fields, found [query] and [fields]","line":1,"col":57},"status":400} at /var/www/snowplow_local/vendor/elasticsearch/elasticsearch/src/Elasticsearch/Connections/Connection.php:620)

ElasticSearchの公式サイト(https://www.elastic.co/guide/en/elasticsearch/client/php-api/5.0/index.html)を見ると
multi search(msearch)APIが見当たりません。PHPからは使用できないのでしょうか。
又、「試したこと」に記載したようにcurlから起動できないかも試していますが、正常に動作しませんでした。
PHPからのElasticSearchのマルチ検索(msearch)を利用する方法をご存じの方がいたら回答をお願い致します。

該当のソースコード

PHP、Curl

試したこと

curlコマンドをPHPに実装
上記でエラーとなったため、端末(teraterm)からcurlコマンドをPHPから発行する方法を試してみました。

  curl -XGET elasticsearch_endpoint/_msearch --data-binary @samplerequest

samplerequetの内容  {"index":"myIndex"}

   {"query":{"multi_match":{"query":"11111111","fields":["_id"]}}}
{"index":"myIndex"}
{"query":{"multi_match":{"query":"99999999","fields":["_id"]}}}

  上記curlコマンドの結果、正常に(期待通りに)検索ができたため、PHPからcurlを発行する処理を考えましたが動作しません。

curl実行コードは以下です。

PHP

1 $curl = curl_init(); 2 $url = 'elasticsearch_endpoint/myIndex/myType/_msearch --data-bainary @sapmle'; 3 curl_setopt($curl, CURLOPT_URL, $url); 4 curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET'); 5 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 6 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 7 8 $response = curl_exec($curl); 9 10 $stscode = curl_getinfo($curl, CURLINFO_HTTP_CODE); 11 12 curl_close($curl);

  
なお、curl_exec()後のstscodeは404でした。

補足情報(FW/ツールのバージョンなど)

環境
PHPバージョン :PHP 7.1.25
AWS SDK for PHPバージョン :3.98.0
フレームワーク(Laravel)バージョン :Laravel Framework 5.5.45
ElasticSearchバージョン :5.5.2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

moonphase

2019/06/11 07:52

コードは上下を ``` で囲んでもらえますか。見辛いです。
HiroshTakayama

2019/06/11 09:23

初めての投稿で、コードを指定する事をしませんで、大変申し訳ありませんでした。 指摘ありがとうございます。 コード指定をして変更しました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問