国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

關(guān)于laravel使用Elastic Search的一些記錄

這篇具有很好參考價(jià)值的文章主要介紹了關(guān)于laravel使用Elastic Search的一些記錄。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1. 準(zhǔn)備工作

因?yàn)槲冶镜豴hp版本是7.3.4,不支持太高的es。
所以使用如下環(huán)境:
laravel6 + php7.3.4 + elastic search 7.17.2

2. 本地安裝elastic search

1. 下載安裝包(這里下載的是7.17.2版本)    https://www.elastic.co/cn/downloads/past-releases
2. 解壓進(jìn)入文件夾
3. 修改config/jvm.options文件,
	1. 將虛擬機(jī)大小
		-Xms4g
		-Xmx4g
		改為:
		-Xms256m
		-Xmx1g
	2. 再文件最后添加以下代碼。(防止啟動(dòng)時(shí)亂碼) 
		-Dfile.encoding=GBK
4. 雙擊bin目錄下的elasticsearch.bat文件,啟動(dòng)elastic search。
5. 訪問http://localhost:9200/   即可安裝成功。

注意事項(xiàng):

  1. 如果是8以上版本,初次啟動(dòng)時(shí)會(huì)生成密碼。安裝成功以后,訪問https://localhost:9200/,會(huì)提示輸入密碼。用戶名為elastic,密碼就是初始化時(shí)的密碼。
  2. 如果是8以上版本,初始化以后,攜帶密碼訪問的話,需要訪問https,而不是http。
  3. 如果是8以上版本,想要關(guān)閉密碼的話,需要修改config/elasticsearch.yml文件,修改如下:xpack.security.enabled: false

3. laravel安裝es依賴

composer require elasticsearch/elasticsearch “7.17.2”

配置database.php

'elasticsearch' => [
   	// Elasticsearch 支持多臺(tái)服務(wù)器負(fù)載均衡,因此這里是一個(gè)數(shù)組
	'hosts' => explode(',',env('ES_HOSTS')),
]

.env 配置

ES_HOSTS=127.0.0.1:9200

初始化es對象,注入到容器中。
修改App/Providers/AppServiceProvider.php文件

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Elasticsearch\ClientBuilder as ESClientBuilder;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
        // 注冊一個(gè)名為 es 的單例
        $this->app->singleton('es', function () {
            // 從配置文件讀取 Elasticsearch 服務(wù)器列表
            $builder = ESClientBuilder::create()->setHosts(config('database.elasticsearch.hosts'));
            // 如果是開發(fā)環(huán)境
            if (app()->environment() === 'local') {
                // 配置日志,Elasticsearch 的請求和返回?cái)?shù)據(jù)將打印到日志文件中,方便我們調(diào)試
                $builder->setLogger(app('log')->driver());
            }

            return $builder->build();
        });

    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }
}

測試是否成功,

php artisan tinker
>>>app('es')->info();

會(huì)輸出和訪問http://127.0.0.1:9200一樣的內(nèi)容。
關(guān)于laravel使用Elastic Search的一些記錄

4. laravel中使用es

創(chuàng)建腳本代碼

php artisan make:command Elasticsearch/SyncProducts

修改app/Console/Commands/Elasticsearch/SyncProducts.php文件

<?php
namespace App\Console\Commands\Elasticsearch;

use App\Models\Product;
use Illuminate\Console\Command;

class SyncProducts extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'es:sync-products';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = '將商品數(shù)據(jù)同步到 Elastic Search';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        // 獲取 Elasticsearch 對象
        $es = app('es');

        $sql = 'id,`name`,`desc`,brand_id,category_id,shop_id,price,sold_count,review_count,status,create_time';

        Product::query()
            ->selectRaw($sql)
            // 使用 chunkById 避免一次性加載過多數(shù)據(jù)
            ->chunkById(100, function ($products) use ($es) {

                $this->info(sprintf('正在同步 ID 范圍為 %s 至 %s 的商品', $products->first()->id, $products->last()->id));

                // 初始化請求體
                $req = ['body' => []];
                // 遍歷商品
                foreach ($products as $product) {
                    // 將商品模型轉(zhuǎn)為 Elasticsearch 所用的數(shù)組
                    $data = $product->toESArray($product->id, $product->category_id);

                    $req['body'][] = [
                        'index' => [
                            '_index' => 'test',
                            '_id' => $data['id'],
                        ],
                    ];
                    $req['body'][] = $data;
                }

                try {
                    // 使用 bulk 方法批量創(chuàng)建
                    $es->bulk($req);
                } catch (\Exception $e) {
                    $this->info($e->getMessage());
                }

            });
        $this->info('同步完成');
    }
}

創(chuàng)建Product模型進(jìn)行數(shù)據(jù)過濾

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Arr;

class Product extends Model
{
    //
    public $table = "product";

    public function toESArray($product_id,$category_id)
    {
        // 只取出需要的字段
        $arr = Arr::only($this->toArray(), [
            'id',
            'name',
            'desc',
            'brand_id',
            'shop_id',
            'price',
            'sold_count',
            'review_count',
            'status',
            'create_time'
        ]);

//        $productSkus = ProductSkus::query()->selectRaw('name,price')->where('product_id',$product_id)->get()->toArray();

        // skus在索引中是一個(gè)二維數(shù)組, 這里只取出需要的 SKU 字段
//        $arr['skus'] = $productSkus;
        $arr['skus'] = rand(111111,999999);

//        $sql = "lmrs_at.name as name,lmrs_at_val.name as value";

//        $attributes = Attributes::query()->selectRaw($sql)
//            ->from('attributes as at')
//
//            ->leftJoin('attribute_values as at_val','at.id','at_val.attribute_id')
//
//            ->where('at.category_id',$category_id)
//
//            ->get()->toArray();

        // attributes 在索引中是一個(gè)二維數(shù)組, 這里只取出需要的商品屬性字段
//        $arr['attributes'] = $attributes;
        $arr['attributes'] = 'attributes';

        return $arr;
    }

}

我們在寫入商品數(shù)據(jù)的時(shí)候用的是 bulk() 方法,這是 Elasticsearch 提供的一個(gè)批量操作接口。設(shè)想一下假如我們系統(tǒng)里有數(shù)百萬條商品,如果每條商品都單獨(dú)請求一次 Elasticsearch 的 API,那就是數(shù)百萬次的請求,性能肯定是很差的,而 bulk() 方法可以讓我們用一次 API 請求完成一批操作,從而減少請求次數(shù)的數(shù)量級,提高整體性能。

創(chuàng)建表

CREATE TABLE `zlsn_product` (
  `id` int(4) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL COMMENT '商品名',
  `desc` varchar(255) DEFAULT NULL COMMENT '描述',
  `brand_id` int(4) DEFAULT NULL COMMENT '品牌id',
  `category_id` int(4) DEFAULT NULL COMMENT '分類id',
  `shop_id` int(4) DEFAULT NULL COMMENT '店鋪id',
  `price` decimal(10,2) DEFAULT NULL COMMENT '價(jià)格',
  `sold_count` int(4) DEFAULT NULL COMMENT '賣出數(shù)量',
  `review_count` int(4) DEFAULT NULL COMMENT '回購數(shù)量',
  `status` tinyint(1) DEFAULT '1' COMMENT '狀態(tài) 1 正常 2 下架',
  `create_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1002 DEFAULT CHARSET=utf8mb4 COMMENT='商品表';

創(chuàng)建執(zhí)行過程,用來隨機(jī)插入1000條測試數(shù)據(jù)

CREATE PROCEDURE p01 ()
BEGIN
declare i int;
set i=1001;

while i<=2000 do

INSERT INTO product ( `name`, `desc`, brand_id, category_id, shop_id, price, sold_count, review_count, `status`, create_time )
VALUES
	(
	(SELECT
		SUBSTRING( MD5( RAND()), 1, 5 )),
	(SELECT
		SUBSTRING( MD5( RAND()), 1, 10 )),
	(SELECT
		CEILING( RAND() * 1000 )),
	(SELECT
		CEILING( RAND() * 1000 )),
	(SELECT
		CEILING( RAND() * 1000 )),
	(SELECT
		CEILING( RAND() * 1000 )),
	(SELECT
		CEILING( RAND() * 1000 )),
	(SELECT
		CEILING( RAND() * 1000 )),
	1,
	NOW());

set i=i+1;
end WHILE;

END;

運(yùn)行以下SQL,執(zhí)行此執(zhí)行過程,生成測試數(shù)據(jù)

CALL p01 ();

此時(shí)zlsn_product表中就有測試數(shù)據(jù)了。

運(yùn)行php腳本,將生成的SQL數(shù)據(jù)存入到es文章來源地址http://www.zghlxwxcb.cn/news/detail-503525.html

php artisan es:sync-products

參考鏈接

  1. laravel使用elasticsearch
  2. Mysql循環(huán)添加1000條數(shù)據(jù)案列
  3. MySQL生成隨機(jī)字符串
  4. win10下Elasticsearch安裝配置完整教程

到了這里,關(guān)于關(guān)于laravel使用Elastic Search的一些記錄的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 使用docker安裝elastic search[ES]和kibana

    使用docker安裝elastic search和kibana,版本均為7.17.1 docker pull# 去dockerhub看具體版本,這里用7.17.1 臨時(shí)安裝生成文件# 參數(shù)說明 -d 后臺(tái)啟動(dòng) –name 起別名即:NAMES -p 9200:9200 將端口映射出來 elasticsearch的9200端口是供外部訪問使用;9300端口是供內(nèi)部訪問使用集群間通訊 -e “discovery.

    2024年02月14日
    瀏覽(20)
  • 【elastic search】JAVA操作elastic search

    【elastic search】JAVA操作elastic search

    目錄 1.環(huán)境準(zhǔn)備 2.ES JAVA API 3.Spring Boot操作ES 本文是作者ES系列的第三篇文章,關(guān)于ES的核心概念移步: https://bugman.blog.csdn.net/article/details/135342256?spm=1001.2014.3001.5502 關(guān)于ES的下載安裝教程以及基本使用,移步: https://bugman.blog.csdn.net/article/details/135342256?spm=1001.2014.3001.5502 在前文

    2024年01月25日
    瀏覽(23)
  • elastic search入門

    elastic search入門

    參考1:Elastic Search 入門 - 知乎 參考2:Ubuntu上安裝ElasticSearch_ubuntu elasticsearch-CSDN博客 1、ElasticSearch安裝 1.1安裝JDK,省略,之前已安裝過 1.2創(chuàng)建ES用戶 1.3?下載ElasticSearch安裝包 Ubuntu上下載: 然后解壓: 1.4配置 配置jvm.options 配置elasticsearch.yml: 根據(jù)以上設(shè)置的path.data和path.l

    2024年01月23日
    瀏覽(15)
  • SpringCloud整合Elastic Search

    1、配置Elastic Search 注釋說明: spring.elasticsearch.rest.uris :設(shè)置Elastic Search的連接地址,這里的示例是本地地址 http://localhost:9200 ,根據(jù)實(shí)際情況修改。 spring.elasticsearch.username 和 spring.elasticsearch.password :設(shè)置Elastic Search的用戶名和密碼,如果沒有設(shè)置訪問控制,這兩項(xiàng)可以省略

    2024年02月15日
    瀏覽(12)
  • Elastic Search 命令詳解-索引操作

    Elastic Search 命令詳解-索引操作

    關(guān)于Elastic Search安裝可以參考《Elastic Search 8.6.2集群安裝部署》及Kibana安裝可以參考《Elastic Search 8.6.2簡單操作》。相關(guān)命令將在Kibana工具的Console平臺(tái)上執(zhí)行。 Elastic Search索引操作主要包含:創(chuàng)建、刪除、關(guān)閉和打開索引,以及索引別名的操作。其中,索引別名的操作在生產(chǎn)環(huán)

    2024年02月08日
    瀏覽(18)
  • 【搜索引擎】elastic search核心概念

    【搜索引擎】elastic search核心概念

    前言 本文不涉及ES的具體安裝下載、操作、集群的內(nèi)容,這部分內(nèi)容會(huì)放在后面一篇文章中。本文只包含ES的核心理論,看完本文再去學(xué)ES的細(xì)節(jié)會(huì)事半功倍。 目錄 1.由日志存儲(chǔ)引出的問題 2.什么是ES? 3.ES的數(shù)據(jù)結(jié)構(gòu) 4.ES的核心原理 5.聯(lián)系作者 本文或者說本系列的來源: 前面

    2024年02月03日
    瀏覽(17)
  • Elastic Search的RestFul API入門:如何進(jìn)行ES的查詢-search

    在這篇教學(xué)文章中,我們將深入探討Elasticsearch的search功能。這是一個(gè)非常強(qiáng)大且靈活的功能,它允許我們對存儲(chǔ)在Elasticsearch中的數(shù)據(jù)進(jìn)行各種復(fù)雜的查詢和分析。本章的目標(biāo)是讓讀者理解如何進(jìn)行Elasticsearch的搜索,以及如何在搜索過程中自主調(diào)整搜索參數(shù),從而靈活地控制

    2024年02月03日
    瀏覽(27)
  • Elastic Search 根據(jù)匹配分和熱度分排序

    匹配分、熱度分歸一化 排序:匹配分 * 0.8 + 熱度分 * 0.2

    2024年02月16日
    瀏覽(15)
  • elastic search es 分組統(tǒng)計(jì) aggs 次數(shù)用法

    參考鏈接:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html es 各個(gè)版本的語法可能會(huì)不一樣,如果大家在用的時(shí)候發(fā)現(xiàn)語法報(bào)錯(cuò)了,請查閱相關(guān)版本的語法。 剛需要按 ip 地址統(tǒng)計(jì)某個(gè)接口的訪問次數(shù),查了下 es 分組統(tǒng)計(jì)次數(shù) aggs 的用法,特此記錄一下,方

    2024年02月11日
    瀏覽(13)
  • Laravel 后臺(tái)管理 Dcat Admin 使用記錄

    安裝文檔地址 框架版本 Laravel 8.* 修改 admin.php 文件 英文改為中文 修改 app.php 文件 表格字段 js 操作 路由 請求方法 鏈接 1. 字?jǐn)?shù)超出隱藏 2. 鏈接新窗口打開 功能 - 默認(rèn)值, 新增操作, 編輯操作 index 方法自動(dòng)覆蓋 grid 方法 將 body 中替換為 表單頁面 動(dòng)態(tài)獲取選項(xiàng)列表

    2024年02月05日
    瀏覽(16)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包