1. 程式人生 > 其它 >tp5.0 封裝elasticsearch工具類

tp5.0 封裝elasticsearch工具類

1.先下載

composer require elasticsearch/elasticsearch

2.在專案的 /extends/tools/es/MyElasticsearch.php 中封裝 資料夾不存在的手動建立

<?php
namespace tools\es;

use Elasticsearch\ClientBuilder;

class MyElasticsearch
{
    //ES客戶端連結
    private $client;

    /**
     * 建構函式
     * MyElasticsearch constructor.
     */
    public
function __construct() { $params = array( '127.0.0.1:9200' ); $this->client = ClientBuilder::create()->setHosts($params)->build(); } /** * 判斷索引是否存在 * @param string $index_name * @return bool|mixed|string */ public function exists_index($index_name
= 'test_ik') { $params = [ 'index' => $index_name ]; try { return $this->client->indices()->exists($params); } catch (\Elasticsearch\Common\Exceptions\BadRequest400Exception $e) { $msg = $e->getMessage();
$msg = json_decode($msg,true); return $msg; } } /** * 建立索引 * @param string $index_name * @return array|mixed|string */ public function create_index($index_name = 'test_ik') { // 只能建立一次 $params = [ 'index' => $index_name, 'body' => [ 'settings' => [ 'number_of_shards' => 5, 'number_of_replicas' => 0 ] ] ]; try { return $this->client->indices()->create($params); } catch (\Elasticsearch\Common\Exceptions\BadRequest400Exception $e) { $msg = $e->getMessage(); $msg = json_decode($msg,true); return $msg; } } /** * 刪除索引 * @param string $index_name * @return array */ public function delete_index($index_name = 'test_ik') { $params = ['index' => $index_name]; $response = $this->client->indices()->delete($params); return $response; } /** * 新增文件 * @param $id * @param $doc ['id'=>100, 'title'=>'phone'] * @param string $index_name * @param string $type_name * @return array */ public function add_doc($id,$doc,$index_name = 'test_ik',$type_name = 'goods') { $params = [ 'index' => $index_name, 'type' => $type_name, 'id' => $id, 'body' => $doc ]; $response = $this->client->index($params); return $response; } /** * 判斷文件存在 * @param int $id * @param string $index_name * @param string $type_name * @return array|bool */ public function exists_doc($id = 1,$index_name = 'test_ik',$type_name = 'goods') { $params = [ 'index' => $index_name, 'type' => $type_name, 'id' => $id ]; $response = $this->client->exists($params); return $response; } /** * 獲取文件 * @param int $id * @param string $index_name * @param string $type_name * @return array */ public function get_doc($id = 1,$index_name = 'test_ik',$type_name = 'goods') { $params = [ 'index' => $index_name, 'type' => $type_name, 'id' => $id ]; $response = $this->client->get($params); return $response; } /** * 更新文件 * @param int $id * @param string $index_name * @param string $type_name * @param array $body ['doc' => ['title' => '蘋果手機iPhoneX']] * @return array */ public function update_doc($id = 1,$index_name = 'test_ik',$type_name = 'goods', $body=[]) { // 可以靈活新增新欄位,最好不要亂新增 $params = [ 'index' => $index_name, 'type' => $type_name, 'id' => $id, 'body' => $body ]; $response = $this->client->update($params); return $response; } /** * 刪除文件 * @param int $id * @param string $index_name * @param string $type_name * @return array */ public function delete_doc($id = 1,$index_name = 'test_ik',$type_name = 'goods') { $params = [ 'index' => $index_name, 'type' => $type_name, 'id' => $id ]; $response = $this->client->delete($params); return $response; } /** * 搜尋文件 (分頁,排序,權重,過濾) * @param string $index_name * @param string $type_name * @param array $body * $body = [ 'query' => [ 'bool' => [ 'should' => [ [ 'match' => [ 'cate_name' => [ 'query' => $keywords, 'boost' => 4, // 權重大 ] ] ], [ 'match' => [ 'goods_name' => [ 'query' => $keywords, 'boost' => 3, ] ] ], [ 'match' => [ 'goods_introduce' => [ 'query' => $keywords, 'boost' => 2, ] ] ] ], ], ], 'sort' => ['id'=>['order'=>'desc']], 'from' => $from, 'size' => $size ]; * @return array */ public function search_doc($index_name = "test_ik",$type_name = "goods",$body=[]) { $params = [ 'index' => $index_name, 'type' => $type_name, 'body' => $body ]; $results = $this->client->search($params); return $results; } }