這篇文章介紹的內容是關於Elasticsearch-PHP api的簡介,現在分享給大家,有需要的朋友可以參考一下
Elasticsearch 是目前流行的大資料處理架構之一,詳細的說明可以自行百度等.
以下文章採用es縮寫作為代表Elasticsearch
es有官方的php api介面,可以採用github下載或者composer.
1.建立索引($client->indices()->create())
$params = [ 'index' => 'user_index', //索引名(相當於mysql的資料庫) 'body' => [ 'mappings' => [ 'normal_type' => [ //類型名(相當於mysql的表) '_all'=>[ // 是否開啟所有欄位的檢索 'enabled' => 'false' ], 'properties' => [ //文件類型設定(相當於mysql的資料類型) 'uid' => [ 'type' => 'integer' // 欄位類型為整型 ], 'username' => [ 'type' => 'keyword' // 欄位類型為關鍵字,如果需要全文檢索索引,則修改為text,注意keyword欄位為整體查詢,不能作為模糊搜尋 ], 'platform' => [ 'type' => 'keyword' ], 'mobile' => [ 'type' => 'integer' ], 'sex' => [ 'type' => 'integer' ], 'source' => [ 'type' => 'keyword' ], 'province' => [ 'type' => 'keyword' ], 'city' => [ 'type' => 'keyword' ], 'tag' => [ 'properties' => [ 'tagName' =>[ 'type' => 'text' ], 'tagWeight' => [ 'type' => 'integer', ] ] ], ] ] ] ] ]; $data = $client->indices()->create($params);
簡單的索引就建立完畢了,現在我們可以擷取下剛建立的索引資訊.
2.擷取索引資訊
2.1 擷取索引資訊($client->indices()->getSettings())
$params = [ 'index' => 'user_index', 'client' => [ 'ignore' => 404 ] ]; $res = $client->indices()->getSettings($params);//擷取庫索引設定資訊
返回的結果如下:
array ( 'user_index' => array ( 'settings' => array ( 'index' => array ( 'creation_date' => '1498116455327', 'number_of_shards' => '5', 'number_of_replicas' => '1', 'uuid' => '8pkONoI7RAuw5HjnFa4UaQ', 'version' => array ( 'created' => '5020299', ), 'provided_name' => 'user_index', ), ), ), )
2.2 擷取Mapping資訊
$params = [ 'index' => 'user_index', 'client' => [ 'ignore' => 404 ] ];$res = $client->indices()->getMapping($params); //擷取mapping資訊
返回的結果如下:
array ( 'user_index' => array ( 'mappings' => array ( 'normal_type' => array ( '_all' => array ( 'enabled' => false, ), 'properties' => array ( 'city' => array ( 'type' => 'keyword', ), 'mobile' => array ( 'type' => 'integer', ), 'platform' => array ( 'type' => 'keyword', ), 'province' => array ( 'type' => 'keyword', ), 'sex' => array ( 'type' => 'integer', ), 'source' => array ( 'type' => 'keyword', ), 'uid' => array ( 'type' => 'integer', ), 'username' => array ( 'type' => 'keyword', ), ), ), ), ),)
這裡擷取的相關資訊就是我們剛剛建立的索引es可以動態修改以及添加相關的資訊.
2.3 修改/添加mapping資訊
$params = [ 'index' => 'user_index', //索引名(相當於mysql的資料庫) 'type' => 'normal_type', 'body' => [ 'normal_type' => [ 'properties' =>[ 'tag' =>[ 'type' => 'text' ] ] ] ] ];$client->indices()->putMapping($params);
2.4 刪除索引
$params = [ 'index' => 'user_index', //索引名(相當於mysql的資料庫) ];
3 es的增刪改查
3.1 增加資料
單條資料插入
介面:$client->index()
$params = [ 'index' => 'my_index', 'type' => 'my_type', 'id' => 'my_id', // 不填則es會自動產生唯一的id 'body' => [ 'testField' => 'abc']];$response = $client->index($params);
批量資料插入
介面:$client->bulk();
foreach($userList as $value){ $params['body'][] = [ 'index' => [ '_index' => 'user_index', '_type' => 'normal_type', '_id' =>$value['uid'] ] ]; $params['body'][] = [ 'uid' => $value['uid'], 'username' => $value['username'], 'platform' => $value['platform'], 'mobile' => $value['mobile'], 'province' => $value['province'], 'city' => $value['city'], 'sex' => $value['gender '], 'source'=>'xxx' ]; } $responses = $client->bulk($params);
3.2 搜尋資料
單條資料搜搜,但是需要知道id
介面:$client->get()
$params = [ 'index' => 'my_index', 'type' => 'my_type', 'id' => 'my_id' // es 自動產生/自己錄入的];$response = $client->get($params);
批量搜尋
介面:$client->search()
$params = [ 'index' => 'my_index', //['my_index1', 'my_index2'],可以通過這種形式進行跨庫查詢 'type' => 'my_type',//['my_type1', 'my_type2'], 'body' => [ 'query' => [ 'match' => [ // 搜尋條件 'age' => '24' , 'tag.tagName' =>'tag' // 如果欄位儲存的是object. //這裡搜尋必須要這樣才能搜尋出結果. ] ], 'from' => '0', // 分頁 'size' => '200' // 每頁數量 'sort' => [ // 排序 'age' => 'desc' //對age欄位進行降序排序 ] ] ]; $res = $client->search($params);
返回的資料大致如下:
array (size=4) 'took' => int 2 'timed_out' => boolean false '_shards' => array (size=3) 'total' => int 5 'successful' => int 5 'failed' => int 0 'hits' => // 搜尋到資料 array (size=3) 'total' => int 2 'max_score' => float 1 'hits' => // 具體資料包 array (size=1) 0 => array (size=5) ...
{ "index": "xxx_index", "type": "normal_type", "body": { "size": 20, "from": 0, "query": { "bool": { "must": [ { "match": { "tag.tagName": "xxxx" } } ] } }, "sort": { "uid": "desc" } }}
3.3 刪除資料
$param = [ 'index' => 'my_index', 'type' => 'my_type', 'id' => 'my_id' ]; $ret = $this->client->delete($param);
返回資料如下:
array (size=7) 'found' => boolean true '_index' => string 'user_index' (length=10) '_type' => string 'normal_type' (length=11) '_id' => string 'AVzh_QnIZvcaH3gE7MvE' (length=20) '_version' => int 2 'result' => string 'deleted' (length=7) '_shards' => array (size=3) 'total' => int 2 'successful' => int 1 'failed' => int 0
3.4 更新資料
$params = [ 'index' => 'my_index', 'type' => 'my_type', 'id' => '3416a75f4cea9109507cacd8e2f2aefc', 'body' => [ 'doc' => [ // 必須帶上這個.表示是文檔操作 'age' => 150 ] ] ]; $res = $client->update($params);
返回結果
array (size=6) '_index' => string 'user_index' (length=10) '_type' => string 'normal_type' (length=11) '_id' => string 'AVzh_QnIZvcaH3gE7Mw5' (length=20) '_version' => int 2 'result' => string 'updated' (length=7) '_shards' => array (size=3) 'total' => int 2 'successful' => int 1 // 當資料沒有發生變化時這裡是為0 'failed' => int 0
4.不同索引之間進行倒資料
POST _reindex{ "source": { "index": "user_profile" }, "dest": { "index": "user_prfile_v1" }, "script": { "inline": " ctx._source.tag=params.new_tags", "params": { "new_tags":{ "tagName":null, "tagWeight":0 } } }}
作者:湯敏正
連結:https://www.jianshu.com/p/a2837f487de6