zoukankan      html  css  js  c++  java
  • 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' => [
        // ...
        LaravelScoutScoutServiceProvider::class,
        // ...
        ScoutEnginesElasticsearchElasticsearchProvider::class,
    ],
    
    

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

    
    php artisan vendor:publish --provider="LaravelScoutScoutServiceProvider"
    
    

    在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 IlluminateDatabaseEloquentModel;
    
    use LaravelScoutSearchable;
    
    /**
     * 学生模型
     */
    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 "AppQues"
    
    

    导入过程

    
    Imported [AppQues] models up to ID: 500
    Imported [AppQues] models up to ID: 1000
    Imported [AppQues] models up to ID: 1500
    Imported [AppQues] models up to ID: 2000
    
    All [AppQues] 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 = AppQues::search($content)->take(1000)->get()->toArray();
        // 分页请求  http://127.0.0.1:8000/es/机器学习?page=1
        $res = AppQues::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之类的最优化问题就需要归一化。
    
            我理解归一化和标准化主要是为了使计算更方便 比如两个变量的量纲不同 可能一个的数值远大于另一个那么他们同时作为变量的时候 可能会造成数值计算的问题,比如说求矩阵的逆可能很不精确 或者梯度下降法的收敛比较困难,还有如果需要计算欧式距离的话可能 量纲也需要调整 所以我估计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

  • 相关阅读:
    读取组合单元格
    Spire.XLS:一款Excel处理神器
    linq
    LINQ语句中的.AsEnumerable() 和 .AsQueryable()的区别
    合并单元格
    web sec / ssd / sshd
    linux——cat之查看cpu信息、显示终端、校验内存.............
    MATLAB mcr lib的环境变量书写
    Linux查看库依赖方法
    判断当前所使用python的版本和来源
  • 原文地址:https://www.cnblogs.com/lalalagq/p/9970068.html
Copyright © 2011-2022 走看看