要点

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

技术栈


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学习笔记的更多相关文章

  1. Elasticsearch学习笔记一

    Elasticsearch Elasticsearch(以下简称ES)是一款Java语言开发的基于Lucene的高效全文搜索引擎.它提供了一个分布式多用户能力的基于RESTful web接口的全文搜索 ...

  2. ELK日志分析 学习笔记

    (贴一篇之前工作期间整理的elk学习笔记) ELK官网 https://www.elastic.co   ELK日志分析系统 学习笔记 概念:ELK = elasticsearch + logstas ...

  3. ELK-6.5.3学习笔记–elk基础环境安装

    本文预计阅读时间 13 分钟 文章目录[隐藏] 1,准备工作. 2,安装elasticsearch. 3,安装logstash. 4,安装kibana 以往都是纸上谈兵,毕竟事情也都由部门其他小伙伴承 ...

  4. aws基础架构学习笔记

    文章大纲 Aws 的优势 架构完善的框架(WAF) Aws 学习笔记 Aws架构中心 Aws 的优势 4.速度优势 5.全球优势 数分钟内实现全球部署 Aws全球基础设施 Aws 数据中心 来自多家O ...

  5. Elasticsearch7.6学习笔记1 Getting start with Elasticsearch

    Elasticsearch7.6学习笔记1 Getting start with Elasticsearch 前言 权威指南中文只有2.x, 但现在es已经到7.6. 就安装最新的来学下. 安装 这里 ...

  6. ElasticSearch学习笔记(超详细)

    文章目录 初识ElasticSearch 什么是ElasticSearch ElasticSearch特点 ElasticSearch用途 ElasticSearch底层实现 ElasticSearc ...

  7. MongoDB学习笔记:快速入门

    MongoDB学习笔记:快速入门   一.MongoDB 简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情况下,添加更多的节点,可以保证服务器性能.M ...

  8. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  9. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

随机推荐

  1. cliendataset中自增长字段的处理

    cliendataset中自增长字段的处理: id:自增长字段. 在client中的处理方法:clientdataset.Fields.FieldByName('id').ReadOnly:=Fals ...

  2. redis_2 数据类型

    1.key Redis keys 命令 下表给出了与 Redis 键相关的基本命令: 序号 命令及描述 1 DEL key该命令用于在 key 存在时删除 key. 2 DUMP key 序列化给定 ...

  3. HttpClient异步请求Post传递Json

    HttpClient异步Post请求,HttpClient.PostAsync(String, HttpContent, CancellationToken),String为Post的Url,Http ...

  4. POJ 2111

    记忆化搜索即可,设DP[I][J]为可到达的最大步数. 输出时用了一种较笨拙的方法,还有一种方法是使用最长上升子序列的方式,挺好,先排序,这让我想起上次BESTCODER的一题 #include &l ...

  5. man pthread_mutex_init 或 man pthread_mutex_lock 没有结果的解决的方法

    问题: 在刚装好的 Mint/Ubuntu 可能会出现 man pthread_mutex 相关的函数没结果, 报No manual entry for pthread_mutex_init 的错误. ...

  6. j-link修复 write flash 一直无法点击

    write flash 一直无法点击 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMTcyNDI5NTc=/font/5a6L5L2T/fonts ...

  7. [iOS翻译]《iOS7 by Tutorials》在Xcode 5里使用单元測试(上)

    简单介绍: 单元測试是软件开发的一个重要方面.毕竟,单元測试能够帮你找到bug和崩溃原因,而程序崩溃是Apple在审查时拒绝app上架的首要原因. 单元測试不是万能的,但Apple把它作为开发工具包的 ...

  8. 局域网网络性能測试方法HDtune 64K有缓存測速法,让你得知你的网络性能

    该方法能够有效測试出您的网络传输性能究竟有多高,该方法通用于有盘,无盘(系统虚拟盘) ,游戏虚拟盘,以及其它带有缓存功能的虚拟盘软件,可是由于每款软件的工作方式和原理都不仅同样,所以每款软件的測试结果 ...

  9. ffmpeg键盘命令响应程序详解

    一.对终端进行读写 当一个程序在命令提示符中被调用时, shell负责将标准输入和标准输出流连接到你的程序, 实现程序与用户间的交互.   1. 标准模式和非标准模式 在默认情况下, 只有用户按下回车 ...

  10. 关于div中图片水平垂直居中的问题

    最近在做一个项目,里面涉及到不固定尺寸要在div里面水平垂直居中显示 我没有用table布局,而是用了div+css,找了很久,终于在网上找到解决方案,特此记录备用 关键核心代码如下: <div ...