這篇文章主要介紹“Laravel8 ES怎么封裝及使用”,在日常操作中,相信很多人在Laravel8 ES怎么封裝及使用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Laravel8 ES怎么封裝及使用”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
創(chuàng)新互聯(lián)服務(wù)項目包括惠民網(wǎng)站建設(shè)、惠民網(wǎng)站制作、惠民網(wǎng)頁制作以及惠民網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,惠民網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到惠民省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
composer 安裝
composer require elasticsearch/elasticsearch
ES 封裝
將數(shù)據(jù)表中所有數(shù)據(jù)添加至 ES 每在 MySQL 里添加一條數(shù)據(jù),在 es 里也添加一條<?php
namespace App\Es;
use Elasticsearch\ClientBuilder;
class MyEs
{
//ES客戶端鏈接
private $client;
/**
* 構(gòu)造函數(shù)
* 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;
}
}
/**
* 創(chuàng)建索引
* @param string $index_name
* @return array|mixed|string
*/
public function create_index($index_name = 'test_ik') { // 只能創(chuàng)建一次
$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;
}
/**
* 搜索文檔 (分頁,排序,權(quán)重,過濾)
* @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;
}
}
public function esAdd()
{
$data = Good::get()->toArray();
$es = new MyEs();
if (!$es->exists_index('goods')) {
//創(chuàng)建es索引,es的索引相當(dāng)于MySQL的數(shù)據(jù)庫
$es->create_index('goods');
}
foreach ($data as $model) {
$es->add_doc($model['id'], $model, 'goods', '_doc');
}
}
直接將代碼補在 MySQL 添加入庫的邏輯方法里即可
進行 MySQL 數(shù)據(jù)修改時,也更新 es 的數(shù)據(jù) //添加至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 修改數(shù)據(jù)的邏輯方法里即可
通過 ES 實現(xiàn)搜索功能 另,補充 es 分頁搜索 //修改MySQL的數(shù)據(jù)
$res=Good::where('id',$id)->update($arr);
$es = new MyEs();
if (!$es->exists_index('goods')) {
$es->create_index('goods');
}
//修改es的數(shù)據(jù)
$es->update_doc($id, 'goods', '_doc',['doc'=>$arr]);
return $res;
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;
}
如果是在微信小程序中使用的話,運用上拉觸底事件即可
此功能是在上面搜索功能之上添加代碼實現(xiàn)的
1. 接收前臺小程序傳遞來的當(dāng)前頁
2. 調(diào)用 es 封裝類的搜索方法時,多傳兩個參數(shù)
3. 在 es 封裝類的搜索方法中增加兩個形參
搜索后搜索值高亮顯示
如果是在微信小程序中使用的話,是直接將標(biāo)簽和值一起輸出到頁面的,加入解析富文本的標(biāo)簽可以將標(biāo)簽轉(zhuǎn)化格式,達到高亮效果
<rich-text nodes="{{item.title}}"></rich-text>
到此,關(guān)于“Laravel8 ES怎么封裝及使用”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
網(wǎng)站欄目:Laravel8ES怎么封裝及使用
網(wǎng)頁鏈接:http://muchs.cn/article36/gehisg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、企業(yè)建站、搜索引擎優(yōu)化、標(biāo)簽優(yōu)化、網(wǎng)站改版、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)