Elasticsearch学习笔记 - 01: Quick start

参考文档https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started.html

全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选。

它可以快速地储存、搜索和分析海量数据

Elastic 的底层是开源库 Lucene。但是,你没法直接用 Lucene,必须自己写代码去调用它的接口。Elastic 是 Lucene 的封装,提供了 REST API 的操作接口,直接可以使用。

一、安装

前提需要安装 Java 8,Linux下输入命令下载、解压、运行

$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.1.zip

$ unzip elasticsearch-5.5.1.zip

$ cd elasticsearch-5.5.1/

接着,进入解压后的目录,运行下面的命令,启动 Elastic。

$ ./bin/elasticsearch

Elastic会在默认的9200端口运行。这时,打开另一个命令行窗口,请求该端口,会得到说明信息。

$ curl localhost:9200
{

  "name" : "atntrTf",//节点名

  "cluster_name" : "elasticsearch",//所属集群名

  "cluster_uuid" : "tf9250XhQ6ee4h7YI11anA",

  "version" : {

    "number" : "5.5.1",

    "build_hash" : "19c13d0",

    "build_date" : "2017-07-18T20:44:24.823Z",

    "build_snapshot" : false,

    "lucene_version" : "6.6.0"

  },

  "tagline" : "You Know, for Search"

}

上面代码中,请求9200端口,Elastic 返回一个 JSON 对象,包含当前节点、集群、版本等信息。

按下 Ctrl + C,Elastic 就会停止运行。

默认情况下,Elastic 只允许本机访问,如果需要远程访问,可以sudo vim (Elastic 安装目录的)config/elasticsearch.yml文件,去掉network.host的注释,将它的值改成0.0.0.0,然后重新启动 Elastic。

二、基本概念

2.1 Cluster

集群,一个ES集群由一个或多个节点(Node)组成,每个集群都有一个cluster name作为标识

2.2 node

节点,一个ES实例就是一个node,一个机器可以有多个实例,所以并不能说一台机器就是一个node,大多数情况下每个node运行在一个独立的环境或虚拟机上。

2.3 index


索引,即一系列documents的集合

2.4 shard

1.分片,ES是分布式搜索引擎,每个索引有一个或多个分片,索引的数据被分配到各个分片上,相当于一桶水用了N个杯子装


2.分片有助于横向扩展,N个分片会被尽可能平均地(rebalance)分配在不同的节点上(例如你有2个节点,4个主分片(不考虑备份),那么每个节点会分到2个分片,后来你增加了2个节点,那么你这4个节点上都会有1个分片,这个过程叫relocation,ES感知后自动完成)


3.分片是独立的,对于一个Search Request的行为,每个分片都会执行这个Request.


4.每个分片都是一个Lucene Index,所以一个分片只能存放 Integer.MAX_VALUE - 128 = 2,147,483,519 个docs。

分片的作用:

1)支持横向扩展,当数据无限增大的情况下可以把分片直接转移到另一台物理机上,而不是增加单一机器的配置

2)支持并发查询,可以实现多台物理机协同处理联合查询,增加吞吐量

2.5 replica

1.复制,可以理解为备份分片,相应地有primary shard(主分片)
2.主分片和备分片不会出现在同一个节点上(防止单点故障),默认情况下一个索引创建5个分片一个备份(即5primary+5replica=10个分片)
3.如果你只有一个节点,那么5个replica都无法分配(unassigned),此时cluster status会变成Yellow。

主从分片之间数据同步方式:主分片数据发生改变通知相应副本分片,副本分片开始复制主分片,复制完成后通知主分片,数据可用

副本的作用 :

1)实现高可用,在主分片出现问题的情况下依旧能够提供完整的数据用于查询

2)提高搜索吞吐量,副本具有用户只读属性,用户可以在主分片和副本分片上查询数据

2.6 Replica主从之间的数据同步

1)主分片数据发生改变,通知相应的副本分片

2)副本分片开始复制

3)复制成功后返回确认消息给主分片

4)主分片确认后发布

查看当前节点的所有Index

$ curl -X GET 'http://localhost:9200/_cat/indices?v'

2.7 Document

Index 里面单条的记录称为 Document(文档)。许多条 Document 构成了一个 Index。

Document 使用 JSON 格式表示,下面是官方文档说明。

$ curl -X GET 'http://localhost:9200/_cat/indices?v'

同一个 Index 里面的 Document,不要求有相同的结构(scheme),但是最好保持相同,这样有利于提高搜索效率。

2.8 Mapping

映射是定义一个文档以及其所包含的字段如何被存储和索引的方法。

例如,用映射来定义以下内容:

1)哪些 string 类型的 field 应当被当成当成 full-text 字段
2)哪些字段应该是数值类型、日期类型或者是地理位置信息
3)日期类型字段的格式是怎么样的
4)是否文档的所有字段都需要被索引到 _all 字段
动态增加的 field 可以由用户自定义的模板来控制其行为
 

三、实际操作

3.1 查看集群(Cluster)健康度

curl -X GET "localhost:9200/_cat/health?v"

返回

epoch      timestamp cluster       status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1475247709 17:01:49  elasticsearch green           1         1      0   0    0    0        0             0                  -                100.0%

其中 status表示集群健康度,分为green yellow red,其中green表示状态良好,所有数据可用,创建了一个或以上的副本,yellow表示当前节点孤立或者没有创建副本,但所有数据可用,red表示状态异常,部分功能可用

3.2 获得集群列表

curl -X GET "localhost:9200/_cat/nodes?v"

返回

ip        heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
127.0.0.1           10           5   5    4.46                        mdi      *      PB2SGZY

3.3 创建一个索引 

curl -X PUT "localhost:9200/customer?pretty"

其中pretty参数表示使用清晰格式 

3.4 查看分片状态

curl -X GET "localhost:9200/_cat/indices?v"

返回

 

health status index    uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open   customer 95SQ4TSUT7mWBT7VNHH67A   5   1          0            0       260b           260b

由于当前只是单机使用,只有本机一个节点没有可以用来备份的机器,健康度为yellow

3.5 索引和查询文档

curl -X PUT "localhost:9200/customer/_doc/1?pretty" -H 'Content-Type: application/json' -d'
{
  "name": "John Doe"
}

3.6 删除索引

DELETE /customer?pretty

四、遇到的问题

Ubuntu安装完java8u191之后Java -version依然显示openjdk

解决方法:修改默认使用的jdk

sudo update-alternatives --config java 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值