搭建es服务的工程中我得到如下教训:
使用新工具前一定要先找本书读一遍,这个比读手册强很多倍真的
例如这个过滤器,网上和手册上都找不到,这个语法我无论如何都写不出来的,当然可以阅读es源码,让我这个略读java的人阅读源码有点难度。
但是在书上很容易找到了,如果我花5个小时大致读读es服务器开发,就不用花一个小时去找这些功能了。
"post_filter":
{
"and":[
{"term":{"delflag":0}},
{"or":[
{"term":{"status":1}},
{"term":{"status":2}}
]
},
{"or":[
{"term":{"cate_id":1036}}
]
}
]
}
想用composer可惜线上的php还用的5.3.8
无奈只能自己拼接查询,然后发起请求了。
elasticsearch的api本质上就是对url发起各种请求
我的代码里面实现了对delete和post进行封装,满足项目开发的绝大部分需求
麻烦的是得自己去写查询拼装的类。
/**
*
* Copyright(c) 201x,
* All rights reserved.
*
* 功 能:
* @author bikang@book.sina.com
* date:2017年2月15日
* 版 本:1.0
*/
class ElasticBookSearcher{
/**
* 获取elasticsearch的搜索结果
* post
* @param unknown $url
* @param unknown $json_data
*/
public function esPost($url,$data) {
$defaults = array(
CURLOPT_POST => 1,
CURLOPT_HEADER => 0,
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_TIMEOUT => 5,
CURLOPT_CONNECTTIMEOUT => 5,
CURLOPT_POSTFIELDS => json_encode($data),
);
$ch = curl_init();
curl_setopt_array($ch, $defaults);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
//delete
public function esDelete($url,$time_out=5,$connect_out=5){
$ch = curl_init ();
curl_setopt ( $ch, CURLOPT_URL, $url);
curl_setopt ( $ch, CURLOPT_FRESH_CONNECT, false );
//head
curl_setopt ( $ch, CURLOPT_HEADER, false );
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt ( $ch, CURLOPT_TIMEOUT, $time_out );
curl_setopt ( $ch, CURLOPT_CONNECTTIMEOUT, $connect_out);
curl_setopt ( $ch, CURLOPT_NOSIGNAL, true );
curl_setopt ( $ch, CURLOPT_CUSTOMREQUEST, 'DELETE' );
$ret = curl_exec ($ch);
return $ret;
}
}

1052

被折叠的 条评论
为什么被折叠?



