zoukankan      html  css  js  c++  java
  • Centos安装elasticsearch,php连接使用

    一.下载安装JAVA

    下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

    # 如果用`wget`方式下载解压时会出现错误`gzip: stdin: not in gzip format`
    # 这里建议在浏览器里下载后传到服务器上,去Oracle官网下载过jdk的童鞋应该都知道,
    # 下载之前需要同意Oracle的安装协议,不然不能下载,但是用wget的方式,默认是不同意,
    # 虽然能下载下来,但是下载下来的文件会有问题,所以在Linux上解压一直失败。
    
    tar -xzvf jdk-13.0.1_linux-x64_bin.tar.gz
    
    vim /etc/profile
    
    export JAVA_HOME=/www/soft/java/jdk-13.0.1
    export JRE_HOME=${JAVA_HOME}/jre
    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
    export PATH=${JAVA_HOME}/bin:$PATH
    
    source /etc/profile
    
    # ln -s /www/soft/java/jdk-13.0.1/bin/java /usr/bin/java
    
    java -version 
    
    

    二.下载安装ElasticSearch

    下载地址:https://www.elastic.co/cn/downloads/elasticsearch

    wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.4.2-linux-x86_64.tar.gz
    
    tar -xzvf elasticsearch-7.4.2-linux-x86_64.tar.gz
    
    # elasticsearch不能用root用户运行,要先创建用户
    groupadd www
    useradd -g www www
    
    chown -R www:www *
    su www
    cd /www/soft/elasticsearch/elasticsearch-7.4.2
    sh bin/elasticsearch -d
    ps -ef | grep elastic
    
    curl http://127.0.0.1:9200
    
    # 出现如下数据,说明elasticsearch已经搭建好了
    {
      "name" : "hckj998",
      "cluster_name" : "elasticsearch",
      "cluster_uuid" : "vDHMfXLhR_aha7EOeClebg",
      "version" : {
        "number" : "7.4.2",
        "build_flavor" : "default",
        "build_type" : "tar",
        "build_hash" : "2f90bbf7b93631e52bafb59b3b049cb44ec25e96",
        "build_date" : "2019-10-28T20:40:44.881551Z",
        "build_snapshot" : false,
        "lucene_version" : "8.2.0",
        "minimum_wire_compatibility_version" : "6.8.0",
        "minimum_index_compatibility_version" : "6.0.0-beta1"
      },
      "tagline" : "You Know, for Search"
    }
    
    

    三.设置开机启动

    cd /www/soft/elasticsearch/elasticsearch-7.4.2
    
    #在bin目录下新建start.sh
    vim start.sh
    
    #!/bin/bash
    cd /www/soft/elasticsearch/elasticsearch-7.4.2
    su www -c "sh bin/elasticsearch -d"
    
    
    #在bin目录下新建stop.sh
    vim stop.sh
    
    #!/bin/bash
    ps -ef | grep elasticsearch | grep -v grep | awk '{print $2}' | xargs kill -9
    
    vim /etc/rc.d/rc.local
    
    #在/etc/rc.d/rc.local尾部添加一行
    /www/soft/elasticsearch/elasticsearch-7.4.2/start.sh
    
    #修改权限
    chmod +x /etc/rc.d/rc.local
    
    #查看rc.local服务的状态
    systemctl list-units --type=service
    #如果改服务显示failed,则需要开启该服务
    systemctl status rc-local.service
    #如果上面的命令这里出现Active: failed (Result: exit-code)
    #则说明启动脚本有问题,根据错误提示,修改start.sh脚本就行
    
    #最后开启服务器
    systemctl enable rc-local.service
    

    四.安装ik中文分词

    wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.4.2/elasticsearch-analysis-ik-7.4.2.zip
    
    cd /www/soft/elasticsearch
    
    elasticsearch-7.4.2/bin/elasticsearch-plugin install -b file:///www/soft/elasticsearch/elasticsearch-analysis-ik-7.4.2.zip
    

    五.验证

    #创建索引
    curl -X PUT  http://127.0.0.1:9200/test_index?pretty -v -H "Content-Type: application/json" -d '
    {
        "settings": {
            "number_of_shards": 1,
            "number_of_replicas": 0
        },
        "mappings": {
            "_source": {
                "enabled": true
            },
            "properties": {
                "id": {
                    "type": "integer"
                },
                "title": {
                    "type": "text",
                    "analyzer": "ik_max_word"
                },
                "image": {
                    "type": "text"
                },
                "author": {
                    "type": "text",
                    "analyzer": "ik_max_word"
                },
                "words": {
                    "type": "integer"
                },
                "description": {
                    "type": "text",
                    "analyzer": "ik_max_word"
                },
                "type_name": {
                    "type": "text"
                }
            }
        }
    }
    '
    
    #查看所有索引
    curl -XGET http://localhost:9200/_aliases?pretty
    curl -XGET '127.0.0.1:9200/_cat/indices?pretty'
    
    #查看索引定义
    curl -XGET "http://127.0.0.1:9200/test_index?pretty"
    
    #查看索引mapping
    curl -XGET "http://127.0.0.1:9200/test_index/_mapping?pretty" 
    
    #删除索引
    curl -XDELETE "http://127.0.0.1:9200/test_index?pretty"
    
    #获取文档数量
    curl -XPOST "http://127.0.0.1:9200/poetry/_doc/count" -H "Content-Type: application/json" -d '
    {
        "query": {
            "match_all": {}
        }
    }' 
    
    #查询所有文档
    curl -XGET "http://127.0.0.1:9200/poetry/_search" -v -H "Content-Type: application/json" -d '
    {
        "query": {
            "match_all": {}
        }
    }'
    
    
    #删除所有文档
    curl -XPOST "http://127.0.0.1:9200/student/_delete_by_query?pretty" -v -H "Content-Type: application/json" -d '
    {
        "query": {
            "match_all": {}
        }
    }'
    
    #删除索引
    curl -XDELETE "http://127.0.0.1:9200/student?pretty"
    
    
    #查询id为10的文档
    curl -XGET "http://127.0.0.1:9200/poetry/_doc/10"
    
    

    .....剩余的操作请参考官网文档:
    https://www.elastic.co/guide/en/elasticsearch/reference/6.0/indices.html

    六.php使用

    安装elasticsearch库, composer地址: https://packagist.org/packages/elasticsearch/elasticsearch

    composer require elasticsearch/elasticsearch
    

    php使用官方文档: https://www.elastic.co/guide/cn/elasticsearch/php/current/_quickstart.html

    简单的封装

    <?php
    
    namespace apputilelsearch;
    
    use ElasticsearchCommonExceptionsMissing404Exception;
    use ElasticsearchClientBuilder;
    
    /**
     * Class ELSearch
     * 封装ELSearch增删改查操作
     * @package apputilelsearch
     */
    class ELSearch
    {
        //获取ELSearch客户端对象
        public static function client() {
            return $client = ClientBuilder::create()
                ->setHosts(config('util.elastic_search_host'))
                ->build();
        }
    
        //删除某一个文档
        public static function delDoc($index, $id) {
            $params = [
                'index' => $index,
                'type' => '_doc',
                'id' => $id
            ];
            $response = self::client()->delete($params);
            return $response;
        }
    
        //删除索引下的所有文档
        public static function delAllDoc($index) {
            $params = [
                'index' => $index,
                'type' => '_doc',
                'body' => [
                    'query' => [
                        'bool' => [
                            'must_not' => ['term' => [ 'id' => -1000 ]],
                        ]
                    ]
                ]
            ];
    
            $response = self::client()->deleteByQuery($params);
            return $response;
        }
    
        //获取文档
        public static function getDoc($index, $id) {
            $params = [
                'index' => $index,
                'type' => '_doc',
                'id' => $id
            ];
            try {
                $response = self::client()->get($params);
                return $response['_source'];
            } catch (Missing404Exception $e) {
                return null;
            }
        }
    
        //更新文档
        public static function updateDoc($index, $id, $data) {
            $params = [
                'index' => $index,
                'type' => '_doc',
                'id' => $id,
                'body' => [
                    'doc' => $data
                ]
            ];
            return self::client()->update($params);
        }
    
        //添加文档
        public static function addDoc($index, $id, $data) {
            $params = [
                'index' => $index,
                'type' => '_doc',
                'id' => $id,
                'body' => $data
            ];
            $response = self::client()->index($params);
            return $response;
        }
    
        //删除索引
        public static function delIndex($index) {
            //先删除索引下所有的文档
            self::delAllDoc($index);
    
            //再删除索引
            $params = ['index' => $index];
            $response = self::client()->indices()->delete($params);
            return $response;
        }
    
        //创建索引
        public static function newIndex($index, $fields) {
            $params = [
                'index' => $index,
                'body' => [
                    'settings' => [
                        'number_of_shards' => 1,
                        'number_of_replicas' => 0
                    ],
                    'mappings' => [
                        '_source' => [
                            'enabled' => true
                        ],
                        'properties' => $fields
                    ]
                ]
            ];
    
            $response = self::client()->indices()->create($params);
            return $response;
        }
    }
    
  • 相关阅读:
    Linux getcwd()的实现【转】
    关于__GNU_SOURCE 这个宏---如何开启【转】
    UBI 文件系统移植 sys 设备信息【转】
    Linux USB驱动框架分析【转】
    局部变量、全局变量、堆、堆栈、静态和全局【转】
    C语言字节对齐问题详解【转】
    usb驱动的基本结构和函数简介【转】
    makefile函数集锦【转】
    非常好!!!Linux源代码阅读——内核引导【转】
    JQuery日记6.9 Promise/A之Callbacks
  • 原文地址:https://www.cnblogs.com/werben/p/11888784.html
Copyright © 2011-2022 走看看