WP笔记

wp_remote_request()和ElasticSearch

在文章Windows本地安装和使用Elasticsearch中介绍过用curl的方式和ElasticSearch交互,为了能在WordPress中使用ElasticSearch,还有必要研究一下用WordPress自带的wp_remote_request()交互的基本方法。

wp_remote_request()的使用方法

wp_remote_request()函数可以发起一个HTTP请求,并获取这次请求的结果,其用法如下:

wp_remote_request( string $url, array $args = array() )
参数用法
$url要请求的地址
$argsHTTP请求的参数,包括:
method:请求方法,例如PUT,POST,GET,DELETE等
timeout:timeout时间,默认5秒
redirection:重定向的最大次数,默认5次
httpversion:HTTP协议版本
user-agent:请求使用的user agent
headers :response headers的key value数组
body:Response body
更具体参数可参考class-http.php

与ElasticSearch交互

比如,向名为my-index-000001的索引里添加一条记录,自动创建ID,代码如下:

$add_doc = array(
  'url' => 'http://localhost:9200/my-index-000001/_doc',
  'args' => array(
    'method' => 'POST',
    'headers' => array( 'Content-Type' => 'application/json' ),
    'body' => json_encode(array(
      'name' => "John Doe"
    ))
  )
);
$do_request = $get_docs;
$request = wp_remote_request( $do_request['url'], $do_request['args']);

返回结果如下:

object(stdClass)#12274 (8) {
  ["_index"]=>
  string(15) "my-index-000001"
  ["_type"]=>
  string(4) "_doc"
  ["_id"]=>
  string(20) "pq8DB34BAqnhPZnG0sdo"
  ["_version"]=>
  int(1)
  ["result"]=>
  string(7) "created"
  ["_shards"]=>
  object(stdClass)#12273 (3) {
    ["total"]=>
    int(2)
    ["successful"]=>
    int(1)
    ["failed"]=>
    int(0)
  }
  ["_seq_no"]=>
  int(2)
  ["_primary_term"]=>
  int(1)
}

只要改变参数,就能进行需要的交互,比如:

创建索引

$create_index = array(
  'url' => 'http://localhost:9200/my-index-000001',
  'args' => array(
    'method' => 'PUT',
  )
);

删除索引

$delete_index = array(
  'url' => 'http://localhost:9200/my-index-000001',
  'args' => array(
    'method' => 'DELETE',
  )
);

获取索引下的所有记录

$get_docs = array(
  'url' => 'http://localhost:9200/my-index-000001/_search',
  'args' => array(
    'method' => 'GET',
    'headers' => array( 'Content-Type' => 'application/json' ),
    'body' => json_encode(array(
      'query' => array('match_all' => '')
    ))
  )
);