【问题标题】:elasticsearch query and cURL in PHP no resultsPHP中的elasticsearch查询和cURL没有结果
【发布时间】:2016-06-12 23:43:38
【问题描述】:

我尝试使用 PHP 执行 cURL 请求并将 curl var_dump 输出分离到不同的变量中?但在 php 中没有显示任何内容,并且 PHP 日志中没有错误。

这是我的代码:

$url='curl -XGET <my_url>:9200/logstash-index-*/_search?pretty -d \'
 {

    "size": 0,
     "aggs" : {
        "langs" : {
                "terms" : { 
                   "field" : "name" ,
                    "size": 0
                          }
                  }
             }
  }\'';

$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);

感谢您的帮助!

【问题讨论】:

    标签: php curl elasticsearch


    【解决方案1】:

    您目前在这里混淆了两件事,linux cURL 命令和 php_curl 命令。

    这是一个 linux 命令,例如输入 bash / sh:

    curl -XGET <my_url>:9200/logstash-index-*/_search?pretty -d '
    {
    "size": 0,
     "aggs" : {
        "langs" : {
                "terms" : { 
                   "field" : "name" ,
                    "size": 0
                          }
                  }
             }
    }'
    

    这是使用 php_curl 的相同示例:

    $url = '<my_url>:9200/logstash-index-*/_search?pretty';
    $data = array(
        "size" => 0,
        "aggs" => array (
            "langs" => array (
                    "terms" => array ( 
                       "field" => "name" ,
                        "size" => 0
                    )
            )
        )
    );
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $return = curl_exec($ch) or die(curl_error());
    curl_close($ch);
    //var_dump($return);
    
    //return is json_encoded, you can decode it to have an array
    $array_return = json_decode($return,true);
    
    $aggregationsArray = array(); 
    foreach($array_return['aggregations']['name']['buckets'] as $person) 
    {
        $aggregationsArray[$person['key']] = $person['doc_count']; 
    }
    var_dump($aggregationsArray);
    

    Edit1 : 发布数据必须是 json_encoded
    Edit2:返回是 json_encoded,用 json_decode
    解码 Edit3:添加自定义循环

    【讨论】:

    • 得到错误:错误:root_cause:-类型:“parse_exception”原因:“无法解析搜索源。源必须是一个对象,但找到了[VALUE_STRING]\ \”类型:“search_phase_execution_exception “原因:“所有分片失败”阶段:“查询”分组:true failed_shards:-分片:0 索引:“logstash-index-2016.05.23”节点:“SQeFot_gTj-mqe5G-6kGSQ”原因:类型:“parse_exception”原因: "解析搜索源失败。源必须是对象,但找到了\'... (length=550)
    • 在传递 CURLOPT_POSTFIELDS 选项时尝试对 $data 数组进行 json_encode。
    • curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
    • 它可以工作并且没有错误,但我可以只将所有键列表获取到数组吗?
    • 您能提供您目前的回报吗?
    猜你喜欢
    • 2012-07-23
    • 2022-11-29
    • 1970-01-01
    • 1970-01-01
    • 2016-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-03
    相关资源
    最近更新 更多