8

私はelasticsearchを始めたばかりです。PHPでcURLを使用してクエリを実行したい。

このコードは何も与えません... (コマンドラインから実行した場合は、以下のエラーを参照してください。このエラーがコンソールの改行が原因であるかどうかはわかりません...)

$url = "curl -s -XGET http://<my_url>:9200/idx_occurrence/Occurrence/_search -d '
{
'filtered' : {
    'query' : {
        'term' : { 'kingdom_interpreted' : 'Plantae' }
    }
}

}' ";

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_HEADER, 0);

$return=curl_exec($ch);

var_dump($return);

しかし、このURLを使用するとhttp://<my_url>:9200/idx_occurrence/Occurrence/_search?q=kingdom_interpreted:Plantae

次に、cURL から結果を取得します。

クエリフィルターが間違っている可能性がありますか?(私は成功せずにいくつかのオプションを試しました)

解析の失敗 [要素 [filtered] のパーサーがありません]]; }]"、"ステータス":500}

4

4 に答える 4

6

私は、elasticsearch インタラクションに Elastica PHP ライブラリを使用しています。

https://github.com/ruflin/Elastica

それは非常に短い学習曲線を持っていました。次に例を示します。

$client = new Elastica_Client();
$index = $client->getIndex('idx_occurrence');
$index->getType('Occurrence');

$query_string = new Elastica_Query_QueryString('Plantae');
$query_string->setFields(array('kingdom_interpreted'));    
$query = new Elastica_Query($query_string);

$index->refresh();
$searchResults = $index->search($query);

これは、特定のフィールドに限定されたクエリ文字列検索を示しています。オブジェクト$searchResultsの配列です。Elastica_ResultSet私が Elastica を気に入っているのは、cURL 関連の問題を抽象化してくれるからです。

于 2012-08-24T15:25:41.127 に答える
1

質問の一部に対する答えを自分で見つけました。コマンドラインで取得できました。

curl -XGET my_server:9200/idx_occurrence/Occurrence/_search?pretty=true -d '{ "query": { "query_string" :{"fields" : ["kingdom_interpreted"], "query": "Plantae" } } }'

PHP を使用して (正しい) cURL 要求を実行すると、空の文字列が返されるだけです。PHP ログにエラーはありません。

$url='curl -XGET http://<my_url>:9200/idx_occurrence/Occurrence/_search?pretty=true
 -d   \'{ "query": { "query_string" :{ "fields" : ["kingdom_interpreted"], 
"query": "Plantae" } } }\'';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
ob_start();
curl_exec ($ch);
curl_close ($ch);
$data = ob_get_contents();
ob_end_clean();
var_dump($data);

繰り返しますが、この $url の代わりに、この URL my_url:9200/idx_occurrence/Occurrence/_search?q=kingdom_interpreted:Plantae を送信するとします。

できます。なんで?

于 2012-07-25T13:23:34.200 に答える
0
$search = 'Plantae'; //search query
$fields = 'kingdom_interpreted'; //fields to look in
$results = file_get_contents('http://server:port/idx_occurrence/Occurrence/_search?q='.$search.'&fields='.$fields);
于 2016-09-27T12:27:57.040 に答える