Rumah > rangka kerja php > Laravel > Penjelasan terperinci tentang pembungkusan Laravel8 ES dan cara menggunakannya

Penjelasan terperinci tentang pembungkusan Laravel8 ES dan cara menggunakannya

藏色散人
Lepaskan: 2022-11-23 17:03:55
ke hadapan
2105 orang telah melayarinya

Artikel ini memperkenalkan anda kepada pengetahuan yang berkaitan tentang Laravel8, termasuk menerangkan pembungkusan Laravel8 ES dan cara menggunakannya Saya harap ia akan membantu semua orang!

Penjelasan terperinci tentang pembungkusan Laravel8 ES dan cara menggunakannya

[Cadangan berkaitan: tutorial video laravel]

pemasangan komposer

composer require elasticsearch/elasticsearch
Salin selepas log masuk

Pakej ES

<?php
namespace App\Es;
use Elasticsearch\ClientBuilder;
class MyEs
{
    //ES客户端链接
    private $client;
    /**
     * 构造函数
     * MyElasticsearch constructor.
     */
    public function __construct()
    {
        $this->client = ClientBuilder::create()->setHosts([&#39;127.0.0.1:9200&#39;])->build();
    }
    /**
     * 判断索引是否存在
     * @param string $index_name
     * @return bool|mixed|string
     */
    public function exists_index($index_name = &#39;test_ik&#39;)
    {
        $params = [
            &#39;index&#39; => $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 = &#39;test_ik&#39;) { // 只能创建一次
        $params = [
            &#39;index&#39; => $index_name,
            &#39;body&#39; => [
                &#39;settings&#39; => [
                    &#39;number_of_shards&#39; => 5,
                    &#39;number_of_replicas&#39; => 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 = &#39;test_ik&#39;) {
        $params = [&#39;index&#39; => $index_name];
        $response = $this->client->indices()->delete($params);
        return $response;
    }
    /**
     * 添加文档
     * @param $id
     * @param $doc [&#39;id&#39;=>100, &#39;title&#39;=>&#39;phone&#39;]
     * @param string $index_name
     * @param string $type_name
     * @return array
     */
    public function add_doc($id,$doc,$index_name = &#39;test_ik&#39;,$type_name = &#39;goods&#39;) {
        $params = [
            &#39;index&#39; => $index_name,
            &#39;type&#39; => $type_name,
            &#39;id&#39; => $id,
            &#39;body&#39; => $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 = &#39;test_ik&#39;,$type_name = &#39;goods&#39;) {
        $params = [
            &#39;index&#39; => $index_name,
            &#39;type&#39; => $type_name,
            &#39;id&#39; => $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 = &#39;test_ik&#39;,$type_name = &#39;goods&#39;) {
        $params = [
            &#39;index&#39; => $index_name,
            &#39;type&#39; => $type_name,
            &#39;id&#39; => $id
        ];
        $response = $this->client->get($params);
        return $response;
    }
    /**
     * 更新文档
     * @param int $id
     * @param string $index_name
     * @param string $type_name
     * @param array $body [&#39;doc&#39; => [&#39;title&#39; => &#39;苹果手机iPhoneX&#39;]]
     * @return array
     */
    public function update_doc($id = 1,$index_name = &#39;test_ik&#39;,$type_name = &#39;goods&#39;, $body=[]) {
        // 可以灵活添加新字段,最好不要乱添加
        $params = [
            &#39;index&#39; => $index_name,
            &#39;type&#39; => $type_name,
            &#39;id&#39; => $id,
            &#39;body&#39; => $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 = &#39;test_ik&#39;,$type_name = &#39;goods&#39;) {
        $params = [
            &#39;index&#39; => $index_name,
            &#39;type&#39; => $type_name,
            &#39;id&#39; => $id
        ];
        $response = $this->client->delete($params);
        return $response;
    }
    /**
     * 搜索文档 (分页,排序,权重,过滤)
     * @param string $index_name
     * @param string $type_name
     * @param array $body
     * $body = [
                &#39;query&#39; => [
                    &#39;match&#39; => [
                        &#39;fang_name&#39; => [
                            &#39;query&#39; => $fangName
                        ]
                    ]
                ],
                &#39;highlight&#39;=>[
                    &#39;fields&#39;=>[
                        &#39;fang_name&#39;=>[
                            &#39;pre_tags&#39;=>[
                                &#39;<span style="color: red">&#39;
                            ],
                            &#39;post_tags&#39;=>[
                                &#39;</span>&#39;
                            ]
                        ]
                    ]
                ]
            ];
     * @return array
     */
    public function search_doc($index_name = "test_ik",$type_name = "goods",$body=[]) {
        $params = [
            &#39;index&#39; => $index_name,
            &#39;type&#39; => $type_name,
            &#39;body&#39; => $body
        ];
        $results = $this->client->search($params);
        return $results;
    }
}
Salin selepas log masuk

Tambah semua data dalam jadual data ke ES

public function esAdd()
    {
        $data = Good::get()->toArray();
        $es = new MyEs();
        if (!$es->exists_index(&#39;goods&#39;)) {
            //创建es索引,es的索引相当于MySQL的数据库
            $es->create_index(&#39;goods&#39;);
        }
        foreach ($data as $model) {
            $es->add_doc($model[&#39;id&#39;], $model, &#39;goods&#39;, &#39;_doc&#39;);
        }
    }
Salin selepas log masuk

Setiap kali sekeping data ditambahkan dalam MySQL, ia adalah juga ditambah dalam es

Terus tambah kod pada kaedah logik untuk menambah MySQL ke pangkalan data

        //添加至MySQL
        $res=Good::insertGetId($arr);
        $es = new MyEs();
        if (!$es->exists_index(&#39;goods&#39;)) {
            $es->create_index(&#39;goods&#39;);
        }
        //添加至es
        $es->add_doc($res, $arr, &#39;goods&#39;, &#39;_doc&#39;);
        return $res;
Salin selepas log masuk

Apabila mengubah suai data MySQL, data es juga akan dikemas kini >

Tambah terus Kod boleh ditambah kepada kaedah logik untuk mengubah suai data dalam MySQL

      //修改MySQL的数据
        $res=Good::where(&#39;id&#39;,$id)->update($arr);
        $es = new MyEs();
        if (!$es->exists_index(&#39;goods&#39;)) {
            $es->create_index(&#39;goods&#39;);
        }
        //修改es的数据
        $es->update_doc($id, &#39;goods&#39;, &#39;_doc&#39;,[&#39;doc&#39;=>$arr]);
        return $res;
Salin selepas log masuk
Fungsi carian dilaksanakan melalui ES

public function search()
    {
        //获取搜索值
        $search = \request()->get(&#39;search&#39;);
        if (!empty($search)) {
            $es = new MyEs();
            $body = [
                &#39;query&#39; => [
                    &#39;match&#39; => [
                        &#39;title&#39; => [
                            &#39;query&#39; => $search
                        ]
                    ]
                ],
                &#39;highlight&#39;=>[
                    &#39;fields&#39;=>[
                        &#39;title&#39;=>[
                            &#39;pre_tags&#39;=>[
                                &#39;<span style="color: red">&#39;
                            ],
                            &#39;post_tags&#39;=>[
                                &#39;</span>&#39;
                            ]
                        ]
                    ]
                ]
            ];
            $res = $es->search_doc(&#39;goods&#39;, &#39;_doc&#39;, $body);
            $data = array_column($res[&#39;hits&#39;][&#39;hits&#39;], &#39;_source&#39;);
            foreach ($data as $key=>&$v){
                 $v[&#39;title&#39;] = $res[&#39;hits&#39;][&#39;hits&#39;][$key][&#39;highlight&#39;][&#39;title&#39;][0];
            }
            unset($v);
            return $data;
        }
        $data = Good::get();
        return $data;
    }
Salin selepas log masuk
Selain itu, es paging carian ditambah

Jika ia berada dalam Jika digunakan dalam applet WeChat, hanya gunakan acara tarik bawah bawah

Fungsi ini dilaksanakan dengan menambahkan kod di atas fungsi carian di atas

1. Terima data semasa yang diluluskan oleh halaman applet bahagian hadapan

2. Apabila memanggil kaedah carian kelas pakej es, hantar dua lagi parameter

3 dua parameter formal kepada kaedah carian kelas pakej es

Nilai carian diserlahkan selepas carian

Jika digunakan dalam applet WeChat, label dan nilai akan dikeluarkan terus ke halaman. Menambah label yang menghuraikan teks kaya boleh menukar label kepada format untuk mencapai keserlahan

<rich-text nodes="{{item.title}}"></rich-text>
Salin selepas log masuk
Pengarang asal: amatur

Disiarkan semula daripada pautan: https://. learnku.com/articles/66177

Atas ialah kandungan terperinci Penjelasan terperinci tentang pembungkusan Laravel8 ES dan cara menggunakannya. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:learnku.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan