elastic学习笔记

要点

不同工具之间版本匹配很重要
由点及面,先实践起来再学细节的原理和使用

技术栈


laravel5.5框架+scout组件+elasticsearch6.3.0搜索引擎

辅助


elasticsearch-head 查看集群数据可视化
中文分词插件Ik

介绍

laravel是一款现代化的php框架
es是搜索引擎
es-head是管理查看使用es的图形界面工具
scout是laravel一款优秀的组件

安装流程

laravel

laravel安装器安装:

laravel new larasearch

配置env文件:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=julyedu
DB_USERNAME=root
DB_PASSWORD=123456

这时php artisan命令启动,访问127.0.0.1:8000 就可以看到项目首页了。

es

在es的官网挑选一个合适的版本,建议选择6.3.0,以便配套使用IK和ES-head。


# 下载
https://www.elastic.co/downloads/past-releases

IK

1.直接plugin命令安装


./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.3.0/elasticsearch-analysis-ik-6.3.0.zip

2.配置修改ik的版本适应es6.3.1,修改文件plugin-descriptor.properties,config文件夹下的配置文件主要是IK本身暂时不需要修改,这个properties文件主要是和es交互,修改其es版本和jdk版本号


# 修改elasticsearch-head/plugin-descriptor.properties文件
description=head - A web front end for an elastic search cluster
version=6.3.1
site=true
name=analysis-ik
classname=org.elasticsearch.plugin.analysis.ik.AnalysisIkPlugin
java.version=1.8
elasticsearch.version=6.3.1 

es-head

head是基于node开发的,所以需要先安装node
node下载地址:http://cdn.npm.taobao.org/dis...

在电脑任意一个目录下(不要在elasticsearch目录里面),执行一下命令,


git clone https://github.com/mobz/elasticsearch-head.git  
cd elasticsearch-head/  
npm install  

为了es-head可以访问es,所以需要配置跨域:

修改两个地方:


#elasticsearch-headGruntfile.js
connect: {server: {options: {port: 9100,hostname: '*',base: '.',keepalive: true}}
}#elasticsearch-5.6.0configelasticsearch.yml
http.cors.enabled: true  
http.cors.allow-origin: "*"  

scout

通过composer安装依赖包


composer require laravel/scout
composer require tamayo/laravel-scout-elastic

基本配置

在config/app.php文件中的providers数组中加入服务提供者


// config/app.php
'providers' => [// ...Laravel\Scout\ScoutServiceProvider::class,// ...ScoutEngines\Elasticsearch\ElasticsearchProvider::class,
],

使用以下命令生成scout配置文件


php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"

在config/scout.php中加入elasticsearch的配置


'elasticsearch' => ['index' => env('ELASTICSEARCH_INDEX', 'laravel'),'hosts' => [env('ELASTICSEARCH_HOST', 'http://localhost:9200'),],
],

然后我们打开.env文件,加入scout和elasticsearch的配置


# scout配置
SCOUT_DRIVER=elasticsearch
SCOUT_PREFIX=# elasticsearch 配置
ELASTICSEARCH_INDEX=esdemo
# elasticsearch 地址
ELASTICSEARCH_HOST=http://172.30.6.1:9200

相关文档地址

laravel scout中文文档地址:https://laravel-china.org/doc...
es中文文档地址:https://www.elastic.co/guide/...
es6.3.0地址:https://www.elastic.co/downlo...
IK github地址:https://github.com/medcl/elas...

启动并查看

启动es


./bin/elasticsearch

地址


http://127.0.0.1:9200/

启动es-head


npm run start

地址


http://127.0.0.1:9100

启动laravel项目


php artisan serve

地址


http://127.0.0.1:8000/es/s?page=1

测试执行

创建索引

创建模型并填充数据

创建模型app/Ques.php,为方便后续测试,请先建表和填充数据,可以手动使用sql语句添加数据,也使用laravel自动的数据迁移和填充。


<?php
namespace App;use Illuminate\Database\Eloquent\Model;use Laravel\Scout\Searchable;/*** 学生模型*/
class Ques extends Model
{use Searchable;//定义关联的表名,不定义的话默认此模型关联的表为 模型名s (users)protected $table = 'aws_ques_tb_0';/******字段相关*******/#定义主键字段名,默认是idprotected $primaryKey = 'id';#定义字段白名单,允许操作表中的哪些字段// protected $fillable = ['ques','name'];#定义字段黑名单,不允许操作表中哪些字段protected $guarded = [];//1、使用model::create([])等方法直接对orm对象操作使,必须定义$guarded或者$fillable//2、使用$m = new model();然后$m->save()的方式不需要定义//3、简便的方式就是定义$fillable = [];#定义隐藏的字段protected $hidden = [];/*** 索引名称** @return string*/public function searchableAs(){return 'ques_index';}/*** 索引名称** @return string*/public function searchableAs(){return 'Quess_index';}/*** 可搜索的数据索引** @return array*/public function toSearchableArray(){$array = $this->toArray();// Customize array...return $array;}
}

把所有现有记录导入到搜索索引里


php artisan scout:import "App\Ques"

导入过程


Imported [App\Ques] models up to ID: 500
Imported [App\Ques] models up to ID: 1000
Imported [App\Ques] models up to ID: 1500
Imported [App\Ques] models up to ID: 2000All [App\Ques] records have been imported.

我们访问es,是不是已经有了刚刚导入的Quess_index索引数据。


http://172.30.6.1:9200/esdemo/Ques_index/_search

试试搜索

在route/web.php中写个demo,试试看;


Route::get('/search/{content}', function ($content) {//直接输出数组data,限制1000条// $res = App\Ques::search($content)->take(1000)->get()->toArray();// 分页请求  http://127.0.0.1:8000/es/机器学习?page=1$res = App\Ques::search($content)->paginate(100)->toArray();dd($res);});

大功告成

输出:


array:12 [▼"current_page" => 1"data" => array:9 [▼0 => array:9 [▼"id" => 922"ques" => "哪些机器学习算法不需要做归一化处理?""analysis" => """概率模型不需要归一化,因为它们不关心变量的值,而是关心变量的分布和变量之间的条件概率,如决策树、rf。而像adaboost、svm、lr、KNN、KMeans之类的最优化问题就需要归一化。\r\n我理解归一化和标准化主要是为了使计算更方便 比如两个变量的量纲不同 可能一个的数值远大于另一个那么他们同时作为变量的时候 可能会造成数值计算的问题,比如说求矩阵的逆可能很不精确 或者梯度下降法的收敛比较困难,还有如果需要计算欧式距离的话可能 量纲也需要调整 所以我估计lr 和 knn 保准话一下应该有好处。至于其他的算 ▶一般我习惯说树形模型,这里说的概率模型可能是差不多的意思。引用自@寒小阳""""type_id" => 3"diff" => 0"isdelete" => 1"created_time" => "2017-12-10 18:57:13""update_time" => "0000-00-00 00:00:00""is_show" => 1]1 => array:9 [▶]2 => array:9 [▶]3 => array:9 [▶]4 => array:9 [▶]5 => array:9 [▶]6 => array:9 [▶]7 => array:9 [▶]8 => array:9 [▶]]"first_page_url" => "http://127.0.0.1:8000/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0?query=%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0&page=1""from" => 1"last_page" => 1"last_page_url" => "http://127.0.0.1:8000/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0?query=%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0&page=1""next_page_url" => null"path" => "http://127.0.0.1:8000/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0""per_page" => 100"prev_page_url" => null"to" => 9"total" => 9
]

参考

PHP使用elasticsearch搜索安装及分词方法【https://segmentfault.com/a/11...】

Laravel中利用Scout集成Elasticsearch搜索引擎【https://segmentfault.com/a/11...】

全文搜索引擎 Elasticsearch 入门教程【http://www.ruanyifeng.com/blo...】

laravel使用ElasticSearch进行搜索【https://blog.csdn.net/lingche...】

elasticsearch6.3.1+IK插件安装部署全攻略【https://blog.csdn.net/superhe...】

原文地址:https://segmentfault.com/a/1190000016468707

转载于:https://www.cnblogs.com/lalalagq/p/9970068.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/249009.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 存储过程中limit

mysql 存储过程中limit 1、mysql的高版本(5.5),存储过程中的limit可以使用变量,如下:select * from student limit iStart,iNum; 2、mysql的低版本(5.1),存储过程中的limit不能使用…

高频ES6

var promise new Promise((resolve, reject)> {if (操作成功) {resolve (value)}else{reject(error)} }) promise.than(function (value) {/*成功*/}, function(value) {/*失败*/}) Promise是异步编程的一种解决方案, 比传统的解决方案--回调函数和事件更加强大.由社区最早…

NodeJS+Express+MongoDB - 张果 - 博客园

目录 一、MongoDB 1.1、安装MongoDB 1.1.1、配置运行环境1.1.2、运行MongoDB1.2、数据库操作 1.2.1、创建数据库与查看数据库1.2.2、删除数据库1.2.3、插入数据1.2.4、查询数据1.2.5、修改1.2.6、删除二、NodeJS访问MongoDB 2.1、安装MongoDB访问驱动2.2、添加数据2.3、修改数…

一个好用的浏览器暗色浏览插件 Dark Reader

转载于:https://www.cnblogs.com/tyong/p/9973363.html

Android小测验感受

1.运行出现“...keeps stopping” 因为 前台变量“无值”而后台却进行“获取变量值” 2.switch(int,char...) case break;(不能忘) 3.转载于:https://www.cnblogs.com/tangxx1996/p/10825134.html

SpringMVC  注解式传递Ztree参数

前端页面JS处理: $("#save").click( function(){var zTree $.fn.zTree.getZTreeObj("treeDemo" );if(projectType "" || projectType null || projectType undefined){alert( "请选择项目类型!" ); return…

实验 4 [bx]和 loop 的使用

实验结论 实验1:综合使用 loop,[bx],编写完整汇编程序,实现向内存 b800:07b8 开始的连续 16 个字单元重复填充字数据 0403H。 1.源代码及实验结果 运行结果:屏幕中央出现一排红色的心❤。 2.将源代码程序中字数据 0403H→修改为 0…

linux开发工具之gcc

首先gcc编译链接的一个实例如下所示: 接下来看一下gcc的常见选项: gcc的使用示例: 转载于:https://www.cnblogs.com/wsw-seu/p/10826124.html

怎么解决eclipse报PermGen space异常的问题

怎么解决eclipse报PermGen space异常的问题 最近使用eclipse做开发,使用的服务器是tomcat,但在启动时报了Caused by: java.lang.OutOfMemoryError: PermGen space的异常。 这个错误很常见,于是配置tomcat下的catalina.bat,配置e…

org.hibernate.service.ServiceRegistryBuilder被弃用

看视频教程是这样写的: //创建配置对象Configuration config new Configuration().configure();//创建服务注册对象ServiceRegistry serviceRegistry new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();//创建会话工厂对象session…

音频基本概念

音频基本概念 声音的本质 音调:频率 音量:振幅 音色:与材质有关,谐波(不规则的正玄波) 屏幕快照 2018-12-04 下午1.53.40.png采样-量化-编码 采样大小: 一个采样用多少bit存放,目前常…

How to use external classes and PHP files in Laravel Controller?

By: Povilas KoropLaravel is an MVC framework with its own folder structure, but sometimes we want to use something external which doesn’t follow the same structure. Let’s review two different scenarios – when we have external class and when it’s just a…

在多种浏览器中嵌入Applet

1 基本信息 摘要:一个开发好的Java Applet,是通过标准的标签(Tag)嵌入到HTML页面中的。浏览器在解析到支持的嵌入Applet的标签时,会启动Java Plug-in来渲染标签中的Java Applet。 由于历史原因,在页面中嵌…

share团队冲刺3

团队冲刺第三天 昨天:完成了对输出文字,按钮控件的添加,能够将其在模拟器上运行 今天:学习输入的添加方式 问题:Android resource linking failed 在改变按钮样式的时候,出现了这个问题,正在百度…

Django学习手册 - ORM 数据创建/表操作 汇总

ORM 查询的数据类型: QuerySet与惰性机制(可以看作是一个列表) 所谓惰性机制:表名.objects.all()或者.filter()等都只是返回了一个QuerySet(查询结果集对象),它并不会马上执行sql,而是当调用QuerySet的时候才执行。 QuerySet特点&…

applet实现大文件ftp上传(三)

下一步呢&#xff0c;当然就是对这个jar文件进行数字证书包装。流程如下&#xff1a; <1>、生成密匙证书(key certificate)&#xff0c;该证书将存储在你的.keystore文件中。Validity指的是密匙的有效期&#xff0c;默认是180&#xff0c;但是这里我们需要一年的时间&am…

网站301重定向 解决方法

网站301重定向&#xff0c;一般都是将不带www的域名转向带有www的&#xff0c;有几个小朋友问过几次需要在哪改&#xff0c;写出来不会的参考下。 1、新建一个“.htaccess”文件 2、复制以下代码&#xff1a;&#xff08;a你的域名&#xff09; Options FollowSymLinks rewrite…

Vue 从入门到进阶之路(十四)

之前的文章我们对 vue 的基础用法已经有了很直观的认识&#xff0c;本章我们来看一下 vue 中的生命周期函数。 上图为 Vue官方为我们提供的完整的生命周期函数的流程图&#xff0c;下面的案例我们只是走了部分情况流程&#xff0c;但所有的生命周期函数都涉及到了。 1 <!DOC…

css 清除浮动float 嗒嘀嗒滴 ----20181120

手动给父元素添加高度通过clear清除内部和外部浮动给父元素添加overfloat属性并结合zoom:1使用给父元素添加浮动        常用方法&#xff1a; ①给兄弟元素添加clear属性&#xff1a;添加一个class为clear&#xff1a;both&#xff0c; ②添加伪类&#xff1a;.clearf…

applet实现大文件ftp上传(一)

由于要用APPLET实现大文件FTP上传下载&#xff0c;从网上搜索了几下&#xff0c;找到很多资料&#xff0c;最后决定采用基于 org.apache.commons.net.ftp包实现FTP上传下载&#xff0c;Net包中的类既提供对协议的底层访问也有高层的抽象。在大多数情况下&#xff0c;抽 象是足够…