【ElasticSearch系列(一)】环境准备

1、概述

1.1、什么是 ElasticSearch

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。

1.2、主要术语

节点 node

它指的是Elasticsearch的单个正在运行的实例。单个物理和虚拟服务器容纳多个节点,这取决于其物理资源的能力,如RAM,存储和处理能力。

集群 cluster

它是一个或多个节点的集合。 集群为整个数据提供跨所有节点的集合索引和搜索功能。

碎片 shards

索引被水平细分为碎片。这意味着每个碎片包含文档的所有属性,但包含的数量比索引少。水平分隔使碎片成为一个独立的节点,可以存储在任何节点中。主碎片是索引的原始水平部分,然后这些主碎片被复制到副本碎片中。

副本 replicas

Elasticsearch允许用户创建其索引和分片的副本。 复制不仅有助于在故障情况下增加数据的可用性,而且还通过在这些副本中执行并行搜索操作来提高搜索的性能。

索引 index

它是不同类型的文档和文档属性的集合。索引还使用分片的概念来提高性能。

类型/映射 type

它是共享同一索引中存在的一组公共字段的文档的集合。

文档 document

它是以JSON格式定义的特定方式的字段集合。每个文档都属于一个类型并驻留在索引中。每个文档都与唯一标识符(称为UID)相关联。

1.3、ElasticSearch 与 MySQL 的相关术语比较

此目的,在于快速理解 ElasticSearch 的相关重要术语。这种对照仅做参考,并不十分严谨。

ElasticSearchMySQL
索引数据库
类型/映射数据表
文档记录(行)
1.4、方向和目的
  • 配置 docker 环境
  • 文章的索引文档
  • 分词器
  • 集群
  • 日志文件的索引文档

2、环境准备

2.1、lnmp 环境

这里使用已经制作好的 docker 镜像,该镜像集成了 mysql, php, nginx, swoole等。

镜像文档

https://hub.docker.com/r/zobeen/ubuntu16.04-lnmp/
2.2、ElasticSearch 环境

这里使用已经制作好的 docker 镜像,该镜像集成了 ElasticSearch 6.3.0 和 ik中文分词器插件。

镜像文档

https://hub.docker.com/r/zobeen/elastic-ik/

Dockerfile

FROM docker.elastic.co/elasticsearch/elasticsearch:6.3.0
MAINTAINER abin

WORKDIR /usr/share/elasticsearch

# 安装中文分词
RUN /usr/share/elasticsearch/bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.3.0/elasticsearch-analysis-ik-6.3.0.zip

# 设置系统时区
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN /bin/echo 'Asia/Shanghai' > /etc/timezone
2.3、docker-compose

为方便管理 lnmp 和 elastic-ik 两种容器,我们使用 docker-compose,下面是 docker-compose 脚本代码。

version: '1'
services:
  lnmp:
    image: zobeen/ubuntu16.04-lnmp:v1.0.0
    networks:
      - net-lnmp
    ports:
      - 8001-8008:8001-8008
    volumes:
      - e:/abin/wwwtest/vhost:/etc/nginx/sites-enabled
      - e:/abin/wwwtest:/var/www/
  elasticsearch:
    image: zobeen/elastic-ik:6.3.0
    networks:
      - net-lnmp
    ports:
      - 9200:9200
      - 9300:9300
    environment:
      - discovery.type=single-node
      - http.host=0.0.0.0
      - transport.host=0.0.0.0

networks:
  net-lnmp:
    external:
      name: net-lnmp
2.4、创建 docker 网络

此目的是为让 lnmp 和 elastic-ik 两个容器能够方便的通信。

$ docker network create net-lnmp
2.5、启动环境
$ docker-compose up -d

然后,在浏览器中输入 http://127.0.0.1:9200 就可以看到 ElasticSearch 的运行信息了,如下所示:

Array
(
    [name] => te-XHX7                                                           // 当前节点名称
    [cluster_name] => docker-cluster                                            // 集群名称
    [cluster_uuid] => trm37b0_SwaH_2oWr2A2DQ                                    // 集群ID
    [version] => Array                                                          // 版本信息
        (
            [number] => 6.3.0
            [build_flavor] => default
            [build_type] => tar
            [build_hash] => 424e937
            [build_date] => 2018-06-11T23:38:03.357887Z
            [build_snapshot] =>
            [lucene_version] => 7.3.1
            [minimum_wire_compatibility_version] => 5.6.0
            [minimum_index_compatibility_version] => 5.0.0
        )

    [tagline] => You Know, for Search
)

3、使用 PHP 进行 ElasticSearch 开发

3.1、引入 PHP 的第三方库
composer require elasticsearch/elasticsearch --no-dev
3.2、获取 ElasticSearch 运行信息
<?php
require_once './vendor/autoload.php';

use Elasticsearch\ClientBuilder;

// 最常见的配置是告诉客户端有关集群的信息:有多少个节点,节点的ip地址和端口号。如果没有指定主机名,客户端会连接 localhost:9200
// 利用 ClientBuilder 的 setHosts() 方法可以改变客户端的默认连接方式。 setHosts() 方法接收一个一维数组,数组里面每个值都代表集群里面的一个节点信息
// 只有通过 docker,才可以这样写,其中 elasticsearch 是 docker-compose.yml 中的容器名称
$hosts = [
    'elasticsearch:9200',
];

// 实例化一个客户端
$client = ClientBuilder::create()->setHosts($hosts)->build();

// 一定要用 try-catch 块包裹哦,因为网络请求会有异常发生
try {
    $response = $client->info();
    print_r($response);
} catch (\Exception $e) {
    echo 'error: ' . $e->getMessage();
}

以上如果请求成功,将会和在浏览器中输入 http://127.0.0.1:9200 看到的效果一样。

致此,我们便配置好了 ElasticSearch 的 PHP 开发环境。

转载于:https://my.oschina.net/zobeen/blog/2250140

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值