es中修改某个字段值_搜索引擎之laravel中使用elasticsearch(一)
一、概述
Elasticsearch官方提供了Composer包可直接引用就好,不过要注意;如果你使用的elastcsearch不是最新的那么我建议你指定合适的版本下载,而不要采用最新的,因为不同版本的es提供的api不同
https://packagist.org/packages/elasticsearch/elasticsearch
除了es外在laravel中也可以使用Scout;不过es中的查找方式功能比scout全,相对来说es可以更好地满足电商系统的需求
composer 命令:
composer require elasticsearch/elasticsearch
配置:
laravel 链接Elasticsearch ;链接只需要配置es的服务器与IP地址就好了
然后修改.env
添加Elasticsearch到laravel的容器中
可以通过tinker 进行测试
app(‘es’)->info();
我们可以查询之前给es配置的索引test中的数据
app('es')->get(['index' => 'test', 'type' => '_doc', 'id' => 1]);
二、使用elasticsearch创建商品的索引搜索
因为在项目中是需要对于商品进行查询的,也就是输入商品相关名称的关键字然后查找对应的数据;
这里还是需要解释es的搜索,es搜索是根据与文档查找的而不是根据与数据库进行查询。
也就是说实际上我们需要先把数据放到es中,也就是存在文档中,然后通过es的对应索引进行查找最终显示
在这个时候那么我们就需要整理一下需要事先存在于es文档中的数据内容及数据的格式。
对于商品的信息来说我们目前最为主要的就是展示商品的goods信息,以及sku,分类信息,属性
设置虚拟字段attr_name
测试之后的结果
及如上就是实际会存在es中的数据内容及其格式
创建商品的索引
curl –XPUT http://localhost:9200/goods/
然后添加文档
curl -H'Content-Type: application/json' -XPUT http://localhost:9200/goods/_mapping/_doc?pretty -d'{
"properties": {
"title": { "type": "text", "analyzer": "ik_smart" },
"long_title": { "type": "text", "analyzer": "ik_smart" },
"category_id": { "type": "integer" },
"category_path" : { "type": "keyword" } ,
"category_name" : { "type": "keyword" } ,
"desc": { "type": "text", "analyzer": "ik_smart" },
"sale": { "type": "integer" },
"sort": { "type": "integer" },
"state": { "type": "integer" },
"pv": { "type": "integer" },
"skus": {
"type": "nested",
"properties": {
"attr_name": { "type": "text", "analyzer": "ik_smart" },
"price": { "type": "scaled_float", "scaling_factor": 100 },
"stock": { "type": "integer" }
}
}
}
}'
"analyzer": "ik_smart" 代表这个字段需要使用 IK 中文分词器分词
还有有一些字段的类型是 keyword,这是字符串类型的一种,这种类型是告诉 Elasticsearch 不需要对这个字段做分词,通常用于邮箱、标签、属性等字段。
skus的字段类型是 nested,代表这个字段是一个复杂对象,由下一级的 properties 字段定义这个对象的字段。我们的『商品 SKU』明明是对象数组,为什么这里可以定义成对象?这是 Elasticsearch 的另外一个特性,每个字段都可以保存多个值,这也是 Elasticsearch 的类型没有数组的原因,因为不需要,每个字段都可以是数组
然后测试
注意需要重新打开tinker
$goods = App\Models\Goods::find(78)->toESArray();
app('es')->index(['id' => $goods['id'], 'index' => 'goods', 'type' => '_doc', 'body' => $goods]);
app('es')->get(['index' => 'goods', 'type' => '_doc', 'id' => 78]);
es中修改某个字段值_搜索引擎之laravel中使用elasticsearch(一)相关推荐
- datagrid如何获取一行数据中的某个字段值_或许是全网最全面关于数据库面试题...
原文: https://www.enmotech.com/web/detail/1/794/1.html 两万字全面论述数据库面试题(上) https://www.enmotech.com/web/d ...
- datagrid如何获取一行数据中的某个字段值_使用Mysql 数据库 新手常见问题
松勤软件测试 坚持教育初心 既问收获也问耕耘 平时用惯了 SQL Server 和 Oracle,基本语法已定型,导致在Mysql数据库操作时经常会报错 1.mysql 中如果字段是字符类型(含中文) ...
- mysql比较两张表中两个字段值_如何通过SQL找出2个表里值不同的列的方法
以下有两个表,他们的结构完全相同,请通过SQL找出值不同的列. Student_1 NAME AGE SCORE peter 26 100 jack 25 96 daniel 26 48 bark 2 ...
- list中抽出某一个字段的值_使用LINQ获取List列表中的某个字段值
使用LINQ获取列表中的某个字段值,下面以获取员工列表中的编号字段为例子. 1.使用Select方法 1 List emplayeeList = GetEmplayeeList(); //获取员工信息 ...
- linq 清除一条数据中的某个字段值_B端通用批量数据导入方案设计
点击上方蓝色字体,关注我 B端通用批量数据导入方案设计 文 | 3548字 估计阅读 | 9分钟 引题 B端产品经常遇到大量数据录入的需求.如春季招聘完成后,给新招的120个员工建立员工档案,并创建员 ...
- VUE项目中使用this.$forceUpdate();解决页面v-for中修改item属性值后页面v-if不改变的问题
VUE项目中使用this.$forceUpdate();解决页面v-for中修改item属性值后页面v-if不改变的问题 参考文章: (1)VUE项目中使用this.$forceUpdate();解决 ...
- 学习旧岛小程序 (5) observer 函数中修改属性的值
不要在一个属性的 observer 函数中修改属性的值 不然会造成内存泄露 错误代码: properties: {/* 期刊号 */index: {type: String,observer: fu ...
- GridView控件RowDataBound事件中获取列字段值的几种途径
前台: <asp:TemplateField HeaderText="充值总额|账号余额"><ItemTemplate><asp:Label ID=& ...
- shell中修改=后的值
shell中修改=后的值 比如某个配置文件myconfig.txt中有初始化一行值如下,我想在另一个脚本中去修改123为456 myconfig.txt export test=123 #!/bin/ ...
最新文章
- spring-boot框架dubbo在controlle中r注解@Reference注入service,但是调用方法时候,service报null空指针异常
- tia v15 添加项目_作为一名机器人集成项目的电气工程师,你及格吗?
- 字节跳动Deep Retrieval召回模型笔记
- error C2471和error C1083
- gprs模块ftp 远程升级_基于GPRS无线通信技术的冷链监测系统
- 一文看懂LR寄存器及 BX LR 指令的两种用途
- ORB_SLAM3_一张图说明ORB-SLAM中的ORB特征提取和图像匹配算法流程
- 【OpenCV学习笔记】【函数学习】十三(剔除检测到的不符合要求的对象)
- iOS gzip解压
- 网易云音乐安装完成以后点击图标打不开的解决办法
- uniapp中使用微信登录app
- 显卡,就是一个男人对自己的交待
- MySQL创建用户并授权、删除用户(密码规则)
- matlab使用linprog()函数解决简单的线性规划问题
- 如何看自己系统是否支持DirectX 9.0c
- 生活中的哈哈语录和顺口溜。
- 关于C++的数组或者字符串的输入问题
- 500人访问的网站服务器配置,500人并发量的服务器配置
- 手机GPU性能评估指标
- 算法分析与设计实验十二