【laralve项目】深度使用elasticsearch(1)

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 【laralve项目】深度使用elasticsearch

创建商品的索引

http://localhost:9200/goods/

屏幕快照 2022-05-16 下午10.48.28.png

然后添加文档

“analyzer”: “ik_smart” 代表这个字段需要使用 IK 中文分词器分词

还有有一些字段的类型是 keyword,这是字符串类型的一种,这种类型是告诉 Elasticsearch 不需要对这个字段做分词,通常用于邮箱、标签、属性等字段。

skus的字段类型是 nested,代表这个字段是一个复杂对象,由下一级的 properties 字段定义这个对象的字段。我们的『商品 SKU』明明是对象数组,为什么这里可以定义成对象?这是 Elasticsearch 的另外一个特性,每个字段都可以保存多个值,这也是 Elasticsearch 的类型没有数组的原因,因为不需要,每个字段都可以是数组

屏幕快照 2022-05-16 下午10.49.01.png屏幕快照 2022-05-16 下午10.49.08.png

给索引添加以存在的数据

关于数据的添加来源有两个点,一已经有的数据,而是后续添加的数据

  1. 同步已有的数据
  2. 同步已有的数据的方式建议采用命令;也就是artisan命令来实现;

现在虽然是在本地执行,但是项目会部署到服务器上,这个时候如果凭访问去控制器填充数据这很显然并是不一个很好地方式。


通常来说通过执行命令来实现我数据的同步会显得更加的快速。

php artisan make:command Elasticsearch/SyncGoods

屏幕快照 2022-05-16 下午10.49.48.png

在这个里边写上处理把已经存在的数据同步到elasticsearch


我们在写入商品数据的时候用的是 bulk() 方法,这是 Elasticsearch 提供的一个批量操作接口。设想一下假如我们系统里有数百万条商品,如果每条商品都单独请求一次 Elasticsearch 的 API,那就是数百万次 的请求,性能肯定是很差的,而 bulk() 方法可以让我们用一次 API 请求完成一批操作,从而减少请求次数的数量级,提高整体性能。


bulk() 方法的参数是一个数组,数组的第一维描述了我们要做的操作,第二行则代表这个操作所需要的数据,第三行操作描述,第四行数据,依次类推,当然如果是删除操作则没有数据行。我们这个代码里只有创建数据,因此都是每两行一组操作。


屏幕快照 2022-05-16 下午10.50.10.png

<?php
namespace App\Console\Commands\Elasticsearch;
use Illuminate\Console\Command;
use App\Models\Goods;
class SyncGoods extends Command
{
    protected $signature = 'es:sync-goods';
    protected $description = '将商品数据同步到 Elasticsearch';
    public function __construct()
    {
        parent::__construct();
    }
    public function handle()
    {
        $this->info('正在导入商品数据....');
        // 使用 chunkById 避免一次性加载过多数据
        Goods::query()->with('skus')->chunkById(100, function ($goods) {
            // 初始化请求体
            $req = ['body' => []];
            // 遍历商品
            foreach ($goods as $value) {
                // 将商品模型转为 Elasticsearch 所用的数组
                $data = $value->toESArray();
                $req['body'][] = [
                    'index' => [
                        '_index' => 'goods',// 指定es 的索引
                        '_type'  => '_doc',
                        '_id'    => $data['id'],
                    ],
                ];
                $req['body'][] = $data;
            }
            try {
                // 使用 bulk 方法批量创建
                app('es')->bulk($req);
            } catch (\Exception $e) {
                $this->error($e->getMessage());
            }
        });
        $this->info('同步完成');
    }
}
相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
SQL 自然语言处理 Java
Springboot项目中使用Elasticsearch的RestClient
上一篇介绍了Elasticsearch的入门《5000字详说Elasticsearch入门(一)》,本篇介绍Springboot如何集成使用Elasticsearch。分为3步:配置properties文件、引入pom依赖、配置RestHighLevelClient类。
28204 1
|
2月前
|
网络协议 Java Maven
多模块项目使用ElasticSearch报错
多模块项目使用ElasticSearch报错
39 6
|
2月前
|
JSON 自然语言处理 算法
ElasticSearch基础2——DSL查询文档,黑马旅游项目查询功能
DSL查询文档、RestClient查询文档、全文检索查询、精准查询、复合查询、地理坐标查询、分页、排序、高亮、黑马旅游案例
ElasticSearch基础2——DSL查询文档,黑马旅游项目查询功能
|
5月前
|
XML 搜索推荐 Java
Elasticsearch集成到Spring Boot项目
将Elasticsearch集成到Spring Boot项目中,可以方便地实现数据的搜索、分析等功能。
247 2
|
存储 自然语言处理 固态存储
微服务轮子项目(52) -Elasticsearch性能优化
微服务轮子项目(52) -Elasticsearch性能优化
117 0
|
存储 网络协议 Linux
淘东电商项目(44) -Docker下搭建ElasticSearch集群
淘东电商项目(44) -Docker下搭建ElasticSearch集群
81 0
|
存储 消息中间件 JSON
统一日志管理方案:Spring项目logback日志与logstash和Elasticsearch整合
统一日志管理方案:Spring项目logback日志与logstash和Elasticsearch整合。
548 0
|
消息中间件 自然语言处理 Java
ElasticSearch 学习笔记(四)-----ES在SpringBoot中的集成以及项目应用开发指南
接上一篇ElasticSearch 学习笔记(三)-----ES的设计原理以及分词器说明。今天我们主要介绍ES 与SpringBoot 的集成以及项目应用开发指南。
889 0
ElasticSearch 学习笔记(四)-----ES在SpringBoot中的集成以及项目应用开发指南
|
SQL Java 中间件
【java_wxid项目】【第十三章】【Elasticsearch集成】
【java_wxid项目】【第十三章】【Elasticsearch集成】
367 0
|
JSON 搜索推荐 Go
Go项目优化——使用Elasticsearch搜索引擎
Go项目优化——使用Elasticsearch搜索引擎
146 0
Go项目优化——使用Elasticsearch搜索引擎