要点

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

技术栈


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. 基于Linux ALSA音频驱动的wav文件解析及播放程序 2012

    本设计思路:先打开一个普通wav音频文件,从定义的文件头前面的44个字节中,取出文件头的定义消息,置于一个文件头的结构体中.然后打开alsa音频驱动,从文件头结构体取出采样精度,声道数,采样频率三个重 ...

  2. Elasticsearch 入门 - 基本概念

    NRT Elasticsearch 是一个 接近实时 的搜索平台.这意味着从你索引文档到其可以被搜索中间存在着一个轻微的延迟(通常为1秒钟). Cluster 一个或多个节点的完整数据.聚合索引和搜索 ...

  3. 【codeforces 805D】Minimum number of steps

    [题目链接]:http://codeforces.com/contest/805/problem/D [题意] 给你一个字符串; 里面只包括a和b; 让你把里面的"ab"子串全都去 ...

  4. HDU6010 Daylight Saving Time

    /* HDU6010 Daylight Saving Time http://acm.hdu.edu.cn/showproblem.php?pid=6010 模拟 题意:算当前时间是否是夏令时 */ ...

  5. Cache index coloring for virtual-address dynamic allocators

    A method for managing a memory, including obtaining a number of indices and a cache line size of a c ...

  6. “XXX.Index”不扩展类“System.Web.UI.Page”,因此此处不同意的问题

    "XXX.Index"不扩展类"System.Web.UI.Page",因此此处不同意的问题 原因:设计页面继承的路径和后台.cs页面类的路径不一致造成的 看下 ...

  7. cpu真实占用率检測工具

     windows任务管理器所示CPU占用,一直在不断的变动跳跃 ,并不能反应真实的平均CPU占用率.迅雷下载工具也是一样 ,有时这些知名软件,反倒是没有做的这么人性化,细致.或 许就是不想让人知道 ...

  8. js 数组克隆

    在JS中,对于对象类型的变量的引用是通过类似C之类的"指针"的方式来操作的,及假设多个变量引用同一个对象,则随意一个变量对对象的操作都会影响到其他的变量. 这个可能不是非常明确,以 ...

  9. mybatis使用generator自己主动生成代码时的类型转换

    使用mybatis的generator自己主动生成代码,可是oracle数据库中number(6,2)总是自己主动转成BigDecimal.我想要转成的是float类型 这样就写了一个类型转换器,须要 ...

  10. Docker Compose + Spring Boot + Nginx + Mysql

    Docker Compose + Spring Boot + Nginx + Mysql 实践 我知道大家这段时间看了我写关于 docker 相关的几篇文章,不疼不痒的,仍然没有感受 docker 的 ...