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';
/******字段相关*******/
#定义主键字段名,默认是id
protected $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: 2000
All [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
elastic学习笔记的更多相关文章
- Elasticsearch学习笔记一
Elasticsearch Elasticsearch(以下简称ES)是一款Java语言开发的基于Lucene的高效全文搜索引擎.它提供了一个分布式多用户能力的基于RESTful web接口的全文搜索 ...
- ELK日志分析 学习笔记
(贴一篇之前工作期间整理的elk学习笔记) ELK官网 https://www.elastic.co ELK日志分析系统 学习笔记 概念:ELK = elasticsearch + logstas ...
- ELK-6.5.3学习笔记–elk基础环境安装
本文预计阅读时间 13 分钟 文章目录[隐藏] 1,准备工作. 2,安装elasticsearch. 3,安装logstash. 4,安装kibana 以往都是纸上谈兵,毕竟事情也都由部门其他小伙伴承 ...
- aws基础架构学习笔记
文章大纲 Aws 的优势 架构完善的框架(WAF) Aws 学习笔记 Aws架构中心 Aws 的优势 4.速度优势 5.全球优势 数分钟内实现全球部署 Aws全球基础设施 Aws 数据中心 来自多家O ...
- Elasticsearch7.6学习笔记1 Getting start with Elasticsearch
Elasticsearch7.6学习笔记1 Getting start with Elasticsearch 前言 权威指南中文只有2.x, 但现在es已经到7.6. 就安装最新的来学下. 安装 这里 ...
- ElasticSearch学习笔记(超详细)
文章目录 初识ElasticSearch 什么是ElasticSearch ElasticSearch特点 ElasticSearch用途 ElasticSearch底层实现 ElasticSearc ...
- MongoDB学习笔记:快速入门
MongoDB学习笔记:快速入门 一.MongoDB 简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情况下,添加更多的节点,可以保证服务器性能.M ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
随机推荐
- hdu 1163
别人的代码开始自己不知道什么数论解法: ab*ab=(a*10+b)(a*10+b)=a^2*100+2ab*10+b^2 所以the root digital=(a+b)*(a+b): 而数论中的定 ...
- hdu 2577 模拟
#include<stdio.h> #define N 200 char s[N]; int judgeup(char c) { if(c>='A'&&c<=' ...
- 纯js编写验证信息提示正则匹配数字,字母,空值
1.显示效果 2,html结构 <div class="border_bg"> <div id="upcCode" style="p ...
- POJ 2470 Ambiguous permutations(简单题 理解题意)
[题目简述]:事实上就是依据题目描写叙述:A permutation of the integers 1 to n is an ordering of these integers. So the n ...
- 【Android 初学】13、Broadcast Receiver
Broadcast Receiver Android广播机制包括三个基本要素:广播(Broadcast) - 用于发送广播.广播接收器(BroadcastReceiver) - 用于接收广播:意图内容 ...
- Cocos2dx之使用UI库结合cocostudio
使用cocostudio的UI编辑器编辑好UI界面,导出UI文件,直接在cocos2dx中使用.通过tag或者name来获取到UI控件 1.编辑ui界面,直接用模板然后拖几个控件过去 2.cocos2 ...
- ScrollView+RadioGroup
今天要分享一下关于动态添加RadioButton的东西: 要实现的效果就是,这个控件可以左右滑动,里面的按钮都是互斥的,类似RadioButton,我的第一反应就是用ScrollView+RadioG ...
- Android 四大组件学习之BroadcastReceiver四
本节学习系统中特殊的广播接收者. 我们前面几节不是说了,当广播接受者一旦注冊到系统中,当系统发送的广播和你注冊的广播的action匹配时,系统就会启动广播接收者所在的进程.除非用户手动停止广播接收者所 ...
- 一个关于 UIPickerView 的 bug
首先,我下描写叙述一下bug的发生情况: 在使用UIPickerView实现选择城市的时候.出现这样一个Bug 1.在iOS 6的系统上 2.Picker的数据上省份一栏选择了"香港&quo ...
- jQuery取得循环列表的第一列值
有例如以下的表格: <table class="list_tab" id="personalDetail"> <tr class=" ...