這篇文章跟大家介紹Laravel8的相關知識,內容包括講解Laravel8 ES封裝以及使用方法,希望對大家有幫助!
【相關推薦:laravel影片教學】
composer 安裝
composer require elasticsearch/elasticsearch
ES 封裝
<?php namespace App\Es; use Elasticsearch\ClientBuilder; class MyEs { //ES客户端链接 private $client; /** * 构造函数 * MyElasticsearch constructor. */ public function __construct() { $this->client = ClientBuilder::create()->setHosts(['127.0.0.1:9200'])->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' => 1 ] ] ]; 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' => [ 'match' => [ 'fang_name' => [ 'query' => $fangName ] ] ], 'highlight'=>[ 'fields'=>[ 'fang_name'=>[ 'pre_tags'=>[ '<span style="color: red">' ], 'post_tags'=>[ '</span>' ] ] ] ] ]; * @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; } }
將資料表中所有資料加入ES
public function esAdd() { $data = Good::get()->toArray(); $es = new MyEs(); if (!$es->exists_index('goods')) { //创建es索引,es的索引相当于MySQL的数据库 $es->create_index('goods'); } foreach ($data as $model) { $es->add_doc($model['id'], $model, 'goods', '_doc'); } }
每在MySQL 中新增一條數據,在es 裡也加入一條
#直接將程式碼補在MySQL 加入到函式庫的邏輯方法裡即可
//添加至MySQL $res=Good::insertGetId($arr); $es = new MyEs(); if (!$es->exists_index('goods')) { $es->create_index('goods'); } //添加至es $es->add_doc($res, $arr, 'goods', '_doc'); return $res;
進行MySQL 資料修改時,也更新es 的資料
直接將程式碼補在MySQL 修改資料的邏輯方法裡即可
//修改MySQL的数据 $res=Good::where('id',$id)->update($arr); $es = new MyEs(); if (!$es->exists_index('goods')) { $es->create_index('goods'); } //修改es的数据 $es->update_doc($id, 'goods', '_doc',['doc'=>$arr]); return $res;
透過ES 實現搜尋功能
public function search() { //获取搜索值 $search = \request()->get('search'); if (!empty($search)) { $es = new MyEs(); $body = [ 'query' => [ 'match' => [ 'title' => [ 'query' => $search ] ] ], 'highlight'=>[ 'fields'=>[ 'title'=>[ 'pre_tags'=>[ '<span style="color: red">' ], 'post_tags'=>[ '</span>' ] ] ] ] ]; $res = $es->search_doc('goods', '_doc', $body); $data = array_column($res['hits']['hits'], '_source'); foreach ($data as $key=>&$v){ $v['title'] = $res['hits']['hits'][$key]['highlight']['title'][0]; } unset($v); return $data; } $data = Good::get(); return $data; }
另,補充es 分頁搜尋
如果是在微信小程式中使用的話,運用上拉觸底事件即可
此功能是在上面搜尋功能之上新增程式碼實現的
1. 接收前台小程式傳遞來的目前頁
2. 呼叫es 封裝類別的搜尋方法時,多傳兩個參數
3. 在es 封裝類別的搜尋方法中增加兩個形參
搜尋後搜尋值高亮顯示
如果是在微信小程式中使用的話,是直接將標籤和值一起輸出到頁面的,加入解析富文本的標籤可以將標籤轉換格式,達到高亮效果
<rich-text nodes="{{item.title}}"></rich-text>
原文作者:amateur
轉自連結:https://learnku.com/articles/66177
以上是詳解Laravel8 ES封裝及其使用方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文指導建立強大的Laravel Restful Apis。 它涵蓋項目設置,資源管理,數據庫交互,序列化,身份驗證,授權,測試和關鍵的安全性最佳實踐。 解決可伸縮性chall

本文提供了使用作曲家安裝最新的Laravel框架的綜合指南。 它詳細說明了先決條件,逐步說明,解決常見安裝問題(PHP版本,擴展,權限)和Minimu

本文指導Laravel-Admin用戶對菜單管理。 它涵蓋了菜單自定義,大型菜單的最佳實踐(分類,模塊化,搜索)以及使用Laravel的作者使用用戶角色和權限的動態菜單生成

本文詳細介紹了Laravel實施OAuth 2.0身份驗證和授權。 它涵蓋了使用League/oauth2-server或提供商特定解決方案的軟件包,強調數據庫設置,客戶端註冊,授權服務器Configu

本文指導Laravel開發人員選擇正確的版本。 它強調了選擇最新的長期支持(LTS)版本以進行穩定和安全性的重要性,同時確認更新版本提供了高級功能。

本文討論了Laravel中的創建和使用自定義驗證規則,提供了定義和實施的步驟。它突出了諸如可重複性和特異性之類的好處,並提供了擴展Laravel驗證系統的方法。

本文討論了在雲本地環境中部署Laravel的最佳實踐,重點是可擴展性,可靠性和安全性。關鍵問題包括容器化,微服務,無狀態設計和優化策略。

本文討論了使用組件在Laravel中創建和自定義可重複使用的UI元素,從而為組織提供最佳實踐並建議增強包裝。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),