ElasticSearch入门一:入门安装和索引基本操作

630 阅读5分钟

学习笔记:

一、概述

ElasticSearch是Elastic Stack(Elasticsearch、Kibana、Beats 和 Logstash)中的核心。它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。

像Github、维基百科、Sound Cloud、Stack Overflow、百度、新浪、阿里等国内外大厂都在使用Elastic Search。

一、ElasticSearch下载安装

1.1 下载

Elastic Stack的中文官网:www.elastic.co/cn。写本文时最新的版本是7.15.1,但是本文中使用的是7.8.0。

Windows下: image.png Linux:

tar -zxvf elasticsearch-7.8.0-linux-x86_64.tar.gz

linux下安装的注意事项:

1、不能使用root用户运行ElasticSearch,解决如下,新建一个用户

adduser elasticsearch
passwd elasticsearch
chown -R elasticsearch elasticsearch-7.8.0
chgrp -R elasticsearch

2、运行报错:max number of threads [3883] for user [elasticsearch] is too low, increase to at least [4096]。解决:

vim /etc/security/limits.conf

* soft nofile 65536
* hard nofile 65536
* soft nproc 5000 
* hard nproc 5000 
root soft nproc 5000 
root hard nproc 5000

vim /etc/sysctl.conf
vm.max_map_count=655360
sysctl -p

reboot # 重启服务器

其他的一些问题:

  1. Elasticsearch是使用java开发的,且7.8版本的ES需要JDK版本1.8以上,默认安装包带有jdk环境,如果系统配置JAVA_HOME,那么使用系统默认的JDK,如果没有配置使用自带的JDK,一般建议使用系统配置的JDK。

  2. 双击启动窗口闪退,通过路径访问追踪错误,如果是“空间不足”,请修改config/jvm.options配置文件: 设置JVM初始内存为1G。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。设置JVM最大可用内存为1G

-Xms1g -Xmx1g

ElasticSearch目录说明:

目录说明
bin可执行脚本目录
config配置目录
jdk内置JDK目录
lib类库
logs日志目录
modules模块目录
plugins插件目录

1.2 运行ElasticSearch

进入bin目录

Windows:双击运行elasticSearch.bat

Linux:./elasticSearch 运行

在浏览器中访问ElasticSearch所在服务器的9200端口,如下:

{
"name": "DESKTOP-ILEN9BL",
"cluster_name": "elasticsearch",
"cluster_uuid": "i_-OifhxTm2brH0U2ojwjQ",
"version": {
"number": "7.8.0",
"build_flavor": "default",
"build_type": "zip",
"build_hash": "757314695644ea9a1dc2fecd26d1a43856725e65",
"build_date": "2020-06-14T19:35:50.234439Z",
"build_snapshot": false,
"lucene_version": "8.5.1",
"minimum_wire_compatibility_version": "6.8.0",
"minimum_index_compatibility_version": "6.0.0-beta1"
},
"tagline": "You Know, for Search"
}

二、ElasticSearch操作

1.1 RESTful风格

REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。Web 应用程序最重要的 REST 原则是,客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。如果服务器在请求之间的任何时间点重启,客户端不会得到通知。此外,无状态请求可以由任何可用服务器回答,这十分适合云计算之类的环境。客户端可以缓存数据以改进性能。

在 REST 样式的 Web 服务中,每个资源都有一个地址。资源本身都是方法调用的目标,方法列表对所有资源都是一样的。这些方法都是标准方法,包括 HTTP GET、POST、PUT、DELETE,还可能包括 HEAD 和 OPTIONS。简单的理解就是,如果想要访问互联网上的资源,就必须向资源所在的服务器发出请求,请求体中必须包含资源的网络路径,以及对资源进行的操作(增删改查)。

可以安装用的比较多的一个软件Postman来使用REST操作ElasticSearch,这里不多赘述关于Postman的安装了。下载地址:www.getpostman.com/apps

ElasticSearch里面的数据格式

Elasticsearch是面向文档型数据库,一条数据在这里就是一个文档。很多人为了方便记忆Elasticsearch里存储文档数据和关系型数据库MySQL存储数据的概念进行一个类比。毕竟大部分的人都是从传统的关系※数据库学到NoSQL的。

image.png

ElasticSearch里的Index可以看做一个库,而Types相当于表,Documents则相当于表的行。 这里Types的概念已经被逐渐弱化,Elasticsearch 6.X中,一个index下已经只能包含一个type,Elasticsearch 7.X中, Type的概念已经被删除了。

ElasticSearch中索引的CRUD

1、创建索引 如果创建的索引名称已经存在那么会返回错误信息。

PUT http://127.0.0.1:9200/shopping

# 返回结果
{

    "acknowledged": true, # true操作成功

    "shards_acknowledged": true, # 分片操作成功

    "index": "shopping"   # 索引名称

}

2、查看索引

查看全部:返回的结果像是一个表格

http://127.0.0.1:9200/_cat/indices?v

image.png 字段说明:

表头含义
health当前服务器健康状态:green(集群完整) yellow(单点正常、集群不完整) red(单点不正常)
status索引打开、关闭状态
index索引名
uuid索引统一编号
pri主分片数量
rep副本数量
docs.count可用文档数量
docs.deleted文档删除状态(逻辑删除)
store.size主分片和副分片整体占空间大小
pri.store.size主分片占空间大小

查看单个索引:与上述的创建索引请求的路径一样,GET是读取操作。

GET http://127.0.0.1:9200/shopping

返回结果:

{
    # 索引名称
    "shopping": {      
        # 别名
        "aliases": {},
        # 映射
        "mappings": {},
        # 设置
        "settings": {
            # 索引
            "index": {
                # 创建时间
                "creation_date": "1614265373911",
                # 主分片数量
                "number_of_shards": "1",
                # 副分片数量
                "number_of_replicas": "1",
                # uuid 唯一标识
                "uuid": "eI5wemRERTumxGCc1bAk2A",
                # 当前索引的版本,每一次修改,版本会随着改变
                "version": {
                    "created": "7080099"
                },
                # 缩影名称
                "provided_name": "shopping"
            }
        }
    }
}

3、删除索引 删除操作时DELETE请求

DELETE http://127.0.0.1:9200/shopping

当索引存在时,删除成功返回:

{
    "acknowledged": true
}
···

当删除不存在的索引时,会返回异常信息。