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;
        }
    }
    
  • 相关阅读:
    LeetCode 230. Kth Smallest Element in a BST
    LeetCode 114. Flatten Binary Tree to Linked List
    LeetCode 222. Count Complete Tree Nodes
    LeetCode 129. Sum Root to Leaf Numbers
    LeetCode 113. Path Sum II
    LeetCode 257. Binary Tree Paths
    Java Convert String & Int
    Java Annotations
    LeetCode 236. Lowest Common Ancestor of a Binary Tree
    LeetCode 235. Lowest Common Ancestor of a Binary Search Tree
  • 原文地址:https://www.cnblogs.com/werben/p/11888784.html
Copyright © 2011-2022 走看看