要点

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

技术栈


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

辅助


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

介绍

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

安装流程

laravel

laravel安装器安装:

  1. laravel new larasearch

配置env文件:

  1. DB_CONNECTION=mysql
  2. DB_HOST=127.0.0.1
  3. DB_PORT=3306
  4. DB_DATABASE=julyedu
  5. DB_USERNAME=root
  6. DB_PASSWORD=123456

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

es

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


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

IK

1.直接plugin命令安装


  1. ./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版本号


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

es-head

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

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


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

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

修改两个地方:


  1. #elasticsearch-headGruntfile.js
  2. connect: {
  3. server: {
  4. options: {
  5. port: 9100,
  6. hostname: '*',
  7. base: '.',
  8. keepalive: true
  9. }
  10. }
  11. }
  12. #elasticsearch-5.6.0configelasticsearch.yml
  13. http.cors.enabled: true
  14. http.cors.allow-origin: "*"

scout

通过composer安装依赖包


  1. composer require laravel/scout
  2. composer require tamayo/laravel-scout-elastic

基本配置

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


  1. // config/app.php
  2. 'providers' => [
  3. // ...
  4. Laravel\Scout\ScoutServiceProvider::class,
  5. // ...
  6. ScoutEngines\Elasticsearch\ElasticsearchProvider::class,
  7. ],

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


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

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


  1. 'elasticsearch' => [
  2. 'index' => env('ELASTICSEARCH_INDEX', 'laravel'),
  3. 'hosts' => [
  4. env('ELASTICSEARCH_HOST', 'http://localhost:9200'),
  5. ],
  6. ],

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


  1. # scout配置
  2. SCOUT_DRIVER=elasticsearch
  3. SCOUT_PREFIX=
  4. # elasticsearch 配置
  5. ELASTICSEARCH_INDEX=esdemo
  6. # elasticsearch 地址
  7. 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


  1. ./bin/elasticsearch

地址


  1. http://127.0.0.1:9200/

启动es-head


  1. npm run start

地址


  1. http://127.0.0.1:9100

启动laravel项目


  1. php artisan serve

地址


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

测试执行

创建索引

创建模型并填充数据

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


  1. <?php
  2. namespace App;
  3. use Illuminate\Database\Eloquent\Model;
  4. use Laravel\Scout\Searchable;
  5. /**
  6. * 学生模型
  7. */
  8. class Ques extends Model
  9. {
  10. use Searchable;
  11. //定义关联的表名,不定义的话默认此模型关联的表为 模型名s (users)
  12. protected $table = 'aws_ques_tb_0';
  13. /******字段相关*******/
  14. #定义主键字段名,默认是id
  15. protected $primaryKey = 'id';
  16. #定义字段白名单,允许操作表中的哪些字段
  17. // protected $fillable = ['ques','name'];
  18. #定义字段黑名单,不允许操作表中哪些字段
  19. protected $guarded = [];
  20. //1、使用model::create([])等方法直接对orm对象操作使,必须定义$guarded或者$fillable
  21. //2、使用$m = new model();然后$m->save()的方式不需要定义
  22. //3、简便的方式就是定义$fillable = [];
  23. #定义隐藏的字段
  24. protected $hidden = [];
  25. /**
  26. * 索引名称
  27. *
  28. * @return string
  29. */
  30. public function searchableAs()
  31. {
  32. return 'ques_index';
  33. }
  34. /**
  35. * 索引名称
  36. *
  37. * @return string
  38. */
  39. public function searchableAs()
  40. {
  41. return 'Quess_index';
  42. }
  43. /**
  44. * 可搜索的数据索引
  45. *
  46. * @return array
  47. */
  48. public function toSearchableArray()
  49. {
  50. $array = $this->toArray();
  51. // Customize array...
  52. return $array;
  53. }
  54. }

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


  1. php artisan scout:import "App\Ques"

导入过程


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

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


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

试试搜索

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


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

大功告成

输出:


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

参考

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. jQuery练习总结(二)

    --------------------------------------- <!DOCTYPE html> <!DOCTYPE HTML PUBLIC "-//W3C/ ...

  2. 对Java线程安全与不安全的理解

    当我们查看JDK API的时候,总会发现一些类说明写着,线程安全或者线程不安全,比如说到StringBuilder中,有这么一句,"将StringBuilder 的实例用于多个线程是不安全的 ...

  3. POJ 2133

    类似于DP一样做,但这题有个大坑,自己看DIS吧.... #include <iostream> #include <cstdio> #include <cstring& ...

  4. spring4和hibernate4.0.0的整合

    1.在myeclipse以下创建一个javaproject或者webproject,我创建的时webproject,用的myeclipse2013 2.导入spring的依赖包 3.导入hiberna ...

  5. 2015.04.30,外语,读书笔记-《Word Power Made Easy》 14 “如何谈论日常现象” SESSION 40

    1. money, and what it will buy penury(['penjuri] n. 贫穷,拮据),来自拉丁词语penuria(need,needness的意思),主要指缺乏财富资源 ...

  6. log4j日志存储到数据库

    一.前提条件 系统必须是使用LOG4J进行日志管理,否则方法无效. 系统必须包含commons-logging-xxx.jar,log4j-xxx.jar这两个JAR包,XXX为版本号. 二.操作步骤 ...

  7. oracle如何创建数据库

    第一步: 从Windows桌面执行“开始”→“Database Configuration Assistant”命令,打开Database Configuration Assistant对话框的欢迎界 ...

  8. poj2947Widget Factory

    对于同余方程的高斯消元啊. 其实也差不多吧.先同一位通分,然后减一下就好了. 主要是判无解和多解的麻烦,需要注意即使有自由元也可能先无解 #include<cstdio> #include ...

  9. 再续iOS开发中的这些权限

    前言 上篇文章iOS开发中的这些权限,你搞懂了吗?介绍了一些常用权限的获取和请求方法,知道这些方法的使用基本上可以搞定大部分应用的权限访问的需求.但是,这些方法并不全面,不能涵盖住所有权限访问的方法. ...

  10. iodine免费上网——本质就是利用dns tunnel建立tcp,然后tcp proxy来实现通过访问虚拟dns0网卡来访问你的dns 授权server

    我的命令: server端: sudo iodined -P passwd -f -DD 10.0.0.100 abc.com client端(直连模式,-r表示使用xxx.abc.com的xxx来转 ...