es笔记记录php的curd
es笔记记录php的curd
1 <?php 2 /** 3 * 超级es搜索api 4 * author:wenzl 5 * date:20140214 6 * 7 */ 8 9 10 class es{ 11 12 /** 13 * 内容:对象属性 14 * 特征:私有属性 15 */ 16 private $host ; 17 private $db ; 18 private $table ; 19 private $esurl ; 20 private $post ; 21 private $method ; 22 private $id ; 23 private $subfix ; 24 private $queryArray; 25 private $queryJson ; 26 private static $esObj = null ; 27 28 29 30 31 32 /** 33 * 功能:单例模式建立对象 34 */ 35 public static function _app(){ 36 is_null(self::$esObj) && 37 self::$esObj = new self() ; 38 self::$esObj->init() ; 39 return self::$esObj ; 40 } 41 42 43 44 45 46 47 /** 48 * 功能:初始化参数 49 */ 50 public function init(){ 51 self::$esObj->host = 'localhost' ; 52 self::$esObj->db = 'job1002' ; 53 self::$esObj->table = 'cmailbox' ; 54 self::$esObj->post = '9200' ; 55 self::$esObj->queryJson = '{}'; 56 self::$esObj->setUrl() ; 57 self::$esObj->method = 'GET' ; 58 } 59 60 61 62 63 64 65 /** 66 * 功能:设置主机 67 */ 68 private function setHost($host){ 69 self::$esObj->host = $host ; 70 return self::$esObj ; 71 } 72 73 74 75 76 77 78 /** 79 * 功能:设置端口 80 */ 81 public function setPost($post){ 82 self::$esObj->post = $post ; 83 return self::$esObj ; 84 } 85 86 87 88 89 90 /** 91 * 功能:设置数据库 92 */ 93 public function setDB($dbname){ 94 self::$esObj->db = $dbname ; 95 return self::$esObj ; 96 } 97 98 99 100 101 102 103 /** 104 * 功能:设置表 105 */ 106 public function setTable($table){ 107 self::$esObj->table = $table ; 108 return self::$esObj ; 109 } 110 111 112 113 114 115 116 /** 117 * 设置id 118 * 如果没有设置id,则 119 * 自动随机18位id 120 */ 121 public function setId($id=''){ 122 !empty($id) && self::$esObj->id = $id ; 123 empty($id) && self::$esObj->id = time() . mt_rand(10000,99999) ; 124 return self::$esObj ; 125 } 126 127 128 129 130 131 132 /** 133 * 功能:设置后缀参数 134 */ 135 public function setSubFix($subfix){ 136 self::$esObj->subfix = $subfix ; 137 return self::$esObj ; 138 } 139 140 141 142 143 144 145 /** 146 * 功能:对置入的参数进行转义json 147 */ 148 public function setInArray($queryArray){ 149 !empty($queryArray) && self::$esObj->queryArray = $queryArray ; 150 !empty($queryArray) && self::$esObj->makeEsJsonFromArray() ; 151 return self::$esObj ; 152 } 153 154 155 156 /** 157 * 功能:设置curl执行的url 158 */ 159 public function setUrl(){ 160 isset(self::$esObj->id) || self::$esObj->setId() ; 161 self::$esObj->esurl = self::$esObj->host . '/' . 162 self::$esObj->db . '/' . self::$esObj->table .'/' . 163 self::$esObj->id . self::$esObj->subfix ; 164 return self::$esObj ; 165 } 166 167 168 169 /** 170 * 功能:设置执行方式POST,PUT... 171 */ 172 public function setMethod($method){ 173 self::$esObj->method = $method ; 174 return self::$esObj ; 175 } 176 177 178 179 180 /** 181 * 功能:设置转义数组为json 182 */ 183 public function makeEsJsonFromArray(){ 184 if(empty(self::$esObj->queryArray)) return self::$esObj ; 185 empty(self::$esObj->queryArray) && self::$esObj->queryJson = '{}'; 186 !empty(self::$esObj->queryArray) && self::$esObj->queryJson = json_encode(self::$esObj->queryArray); 187 return self::$esObj ; 188 } 189 190 191 192 193 /*----[CURD start]----*/ 194 /** 195 * 功能:设置建立数据 196 */ 197 public function createData(){ 198 self::$esObj->setUrl(); 199 self::$esObj->method = self::$esObj->method == 'PUT' ? 200 'PUT' : self::$esObj->method ; 201 return self::$esObj->curlToEs(); 202 } 203 204 205 206 /** 207 * 功能:设置更新数据 208 */ 209 public function updateData(){ 210 self::$esObj->setUrl(); 211 self::$esObj->method = self::$esObj->method == 'POST' ? 212 'POST' : self::$esObj->method ; 213 return self::$esObj->curlToEs() ; 214 } 215 216 217 218 /** 219 * 功能:设置读取数据 220 */ 221 public function readData(){ 222 isset(self::$esObj->id) || 223 self::$esObj->setId('_search') ; 224 self::$esObj->setUrl(); 225 self::$esObj->method = 'GET' ; 226 return self::$esObj->curlToEs() ; 227 } 228 229 230 231 /** 232 * 功能:设置删除数据 233 */ 234 public function deleteData(){ 235 self::$esObj->method = 'DELETE' ; 236 self::$esObj->setUrl() ; 237 return self::$esObj->curlToEs() ; 238 } 239 /*----[CURD end]----*/ 240 241 242 243 244 /** 245 * 功能:获取集群信息 246 */ 247 public function getEsInfo($info=''){ 248 empty($info) && $info = '/_cluster/nodes' ; 249 self::$esObj->id = $info ; 250 self::$esObj->setUrl() ; 251 return self::$esObj->curlToEs() ; 252 } 253 254 255 256 257 /** 258 * 功能:获取mapping信息 259 */ 260 public function getMapping(){ 261 return self::$esObj 262 ->setId('_mapping') 263 ->readData(); 264 } 265 266 267 268 /** 269 * 功能:es执行 270 * 返回:es返回数据 271 * 20140214 272 */ 273 public function curlToEs(){ 274 $ch = curl_init(); 275 curl_setopt($ch, CURLOPT_URL, self::$esObj->esurl) ; 276 self::$esObj->post ? curl_setopt($ch, CURLOPT_PORT, self::$esObj->post) : 277 curl_setopt($ch, CURLOPT_PORT, 9200) ; 278 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1) ; 279 curl_setopt($ch, CURLOPT_CUSTOMREQUEST, strtoupper(self::$esObj->method)); 280 curl_setopt($ch, CURLOPT_POSTFIELDS, self::$esObj->queryJson); 281 $result = curl_exec($ch) ; 282 curl_close($ch) ; 283 return json_decode($result) ; 284 } 285 286 287 288 289 290 /** 291 * 功能:gbk转utf8 292 * 特征:最多支持2维数组 293 * 20140214 294 */ 295 public static function gbkToUtf8($inParam='',&$outResult=array()){ 296 if(is_array($inParam)){ 297 foreach($inParam as $key=>$param){ 298 if(is_array($param)){ 299 foreach($param as $ke=>$p){ 300 $inParam[$key][$ke] = iconv('gbk','utf-8',$p) ; 301 } 302 }else{ 303 $inParam[$key] = iconv('gbk','utf-8',$param) ; 304 } 305 } 306 }else{ 307 $inParam = iconv('gbk','utf-8',$inParam) ; 308 } 309 $outResult = $inParam ; 310 } 311 312 313 314 315 316 /** 317 * 功能:设置出错提示 318 */ 319 public function error($flag = 1){//参数必须为整型 320 empty($flag) || $flag = 1 ; 321 $errors = array(//后期移出,并做可配置 322 1=>'参数为空错误!', 323 11=>'查询语法错误', 324 21=>'结果返回错误', 325 ); 326 foreach ($errors as $key => $error) { 327 if($flag === $key) 328 return $error; 329 } 330 } 331 332 333 334 } 335 336 ?>
代码有待完善。
1 <?php 2 include "elastic.class.php"; 3 include "db.class.php"; 4 5 set_time_limit(0); 6 7 8 9 $dbconfig = array( 10 'host'=>'192.168.66.66', 11 'user'=>'wenzl', 12 'passwd'=>'1o2kkasdfr', 13 'dbname'=>'fuckme' 14 ); 15 16 17 18 19 20 $dbObj = new db($dbconfig); 21 22 23 24 /* 25 for ($i=0; $i < 5000; $i++) { 26 $size = 1000; 27 $j = $i*$size; 28 $r = $dbObj->fields("*")->table("company")->limit("{$j},{$size}")->lookDatas(); 29 $rs = array(); 30 es::gbkToUtf8($r,&$rs); 31 es::_app() 32 ->setDB('fuckanything') 33 ->setTable('company') 34 ->setInArray($rs) 35 ->createData(); 36 usleep(5000); 37 } 38 */ 39 40 41 $rs = array(); 42 $r = $dbObj->fields("*")->table("company")->limit("10")->lookDatas(); 43 es::gbkToUtf8($r,&$rs); 44 echo "<pre>"; 45 //print_r($rs); 46 /* 47 foreach ($rs as $key => $val) { 48 es::_app() 49 ->setDB('fuckanything') 50 ->setTable('company') 51 ->setInArray($val) 52 ->createData(); 53 } 54 */ 55 56 //print_r(es::_app()->setDB('')->setTable('')->getEsInfo('/_nodes/stats')); 57 58 59 print_r( 60 es::_app() 61 ->setDB('fuckanything') 62 ->setTable('company') 63 ->setId('_mapping') 64 ->readData() 65 ); 66 67 68 69 70 71 72 73 /* 74 75 $s = array( 76 'query'=>array( 77 'match'=>array('cname'=>'建筑') 78 ) 79 ); 80 81 $index = array( 82 'settings'=>array( 83 'index'=>array( 84 'number_of_shards'=>10 85 ) 86 ) 87 ); 88 89 $data = array(); 90 91 92 $es = es::_app() 93 ->setDB('job1004') 94 ->setTable('school') 95 ->setInArray($index) 96 ->createData(); 97 98 $esObj = es::_app() 99 ->setDB('job1002') 100 ->setTable('cmailbox') 101 ->setId('_search'); 102 //$esRs = $esObj->setInArray($d)->createData(); 103 //$esRs = $esObj->deleteData(); 104 $esRs = $esObj->setInArray($s)->readData(); 105 echo "<pre>"; 106 print_r($esRs); 107 echo "</pre>"; 108 109 */ 110 111 112 ?>
用例测试,有待完善。
----走出会议室,只有执行力
解决问题是衡量能力的标准。

浙公网安备 33010602011771号