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;
    }
}
原文地址:https://www.cnblogs.com/werben/p/11888784.html