【ElasticSearch实战】ElasticSearch 快速入门教程

ElasticSearch简介

Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上。 Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库—​无论是开源还是私有。

但是 Lucene 仅仅只是一个库。为了充分发挥其功能,你需要使用 Java 并将 Lucene 直接集成到应用程序中。 更糟糕的是,您可能需要获得信息检索学位才能了解其工作原理。Lucene 非常复杂。

Elasticsearch 也是使用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目的是使全文检索变得简单, 通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API。

然而,Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎。 它可以被下面这样准确的形容:

  • 一个分布式的实时文档存储,每个字段 可以被索引与搜索
  • 一个分布式实时分析搜索引擎
  • 能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据

Elasticsearch 将所有的功能打包成一个单独的服务,这样你可以通过程序与它提供的简单的 RESTful API 进行通信, 可以使用自己喜欢的编程语言充当 web 客户端,甚至可以使用命令行(去充当这个客户端)。

就 Elasticsearch 而言,起步很简单。对于初学者来说,它预设了一些适当的默认值,并隐藏了复杂的搜索理论知识。 它开箱即用 。只需最少的理解,你很快就能具有生产力。

随着你知识的积累,你可以利用 Elasticsearch 更多的高级特性,它的整个引擎是可配置并且灵活的。 从众多高级特性中,挑选恰当去修饰的 Elasticsearch,使它能解决你本地遇到的问题。

你可以免费下载,使用,修改 Elasticsearch。它在 Apache 2 license 协议下发布的, 这是众多灵活的开源协议之一。Elasticsearch 的源码被托管在 Github 上 github.com/elastic/elasticsearch

主要代表应用案例如下:

  • Wikipedia 使用 Elasticsearch 提供带有高亮片段的全文搜索,还有 search-as-you-type 和 did-you-mean 的建议。
  • 卫报 使用 Elasticsearch 将网络社交数据结合到访客日志中,为它的编辑们提供公众对于新文章的实时反馈。
  • Stack Overflow 将地理位置查询融入全文检索中去,并且使用 more-like-this 接口去查找相关的问题和回答。
  • GitHub 使用 Elasticsearch 对1300亿行代码进行查询。

Elasticsearch 不仅仅为巨头公司服务。它也帮助了很多初创公司,比如 Datadog 和 Klout, Elasticsearch 帮助他们将想法用原型实现,并转化为可扩展的解决方案。Elasticsearch 能运行在你的笔记本电脑上,或者扩展到数百台服务器上来处理PB级数据。

ElasticSearch 云上支持免费全部商业版本
目前ElasticSearch 与国内外主流云提供商阿里云腾讯云有深入合作,免费使用 Elastic 的全部商业功能!立即在阿里云腾讯云上使用 Elastic 的全部商业功能

主要应用业务场景

  • 智能搜索】 智能搜索系统,按主题、专题及时空三个维度,支持专题/批量/时空检索等能力的智能检索服务,如网站搜索、附近搜索等
  • 日志分析】Elasticsearch、Kafka、Logstash、Kibana日志分析架构,提供强大的搜索、统计、分析及可视化能力。
  • 日志审计】采集应用系统、数据库日志,通过日志搜索、风险告警、分析报表服务,解决数据盗取、越权访问、信息泄露问题。
  • 数字警务室】结构化数据检索:车牌号、时间、经纬度、卡口;向量检索:人体、人脸、机动车、非机动车。

ElasticSearch安装及运行

此处将介绍在window、Mac、Linux、docker下的安装及运行注意事项,在此之前有Elastic的一些常用组件需要了解,包括 Elasticsearch、Kibana、Beats 和 Logstash(也称为 ELK Stack)。能够安全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、分析和可视化。
Elastic软件生态

  • ElasticSearch 是一个基于 JSON 的分布式搜索和分析引擎本身;
  • Kibana 对 Elasticsearch 数据进行可视化;
  • Beats 是一个面向轻量型采集器的平台,这些采集器可从边缘机器发送数据。
  • Logstash 是动态数据收集管道,拥有可扩展的插件生态系统。

在window下安装 Elasticsearch及运行

window安装都比较简单,下载安装包,解压即可;配置一些环境变量ES_HOME(可选),但前提需要安装jdk1.8及以上;因为Elasticsearch时由Java开发的;

  1. 下载Elasticsearch https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.7.1-windows-x86_64.zip 官方下载最新版本,截止发文时为7.7.1版本!
  2. 解压安装包后运行
    进入软件目录bin目录运行elasticsearch即可
    bin/elasticsearch(或bin\elasticsearch.bat在Windows上)

在Mac或Linux下安装 Elasticsearch及运行

  1. 下载Elasticsearch for Linux版本并解压
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.7.1-linux-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.7.1-linux-x86_64.tar.gz.sha512
shasum -a 512 -c elasticsearch-7.7.1-linux-x86_64.tar.gz.sha512 
tar -xzf elasticsearch-7.7.1-linux-x86_64.tar.gz
cd elasticsearch-7.7.1/ 

注意:

  • shasum 命令为比较下载的.tar.gz档案的SHA 和应该输出的已发布校验和 elasticsearch-{version}-linux-x86_64.tar.gz: OK。
  • elasticsearch-7.7.1/ 此目录称为$ES_HOME,可以配置系统环境变量;
  1. 下载Elasticsearch for Mac版本并解压
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.7.1-darwin-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.7.1-darwin-x86_64.tar.gz.sha512
shasum -a 512 -c elasticsearch-7.7.1-darwin-x86_64.tar.gz.sha512 
tar -xzf elasticsearch-7.7.1-darwin-x86_64.tar.gz
cd elasticsearch-7.7.1/
  1. 使用Homebrew在macOS上安装Elasticsearch
    Elastic发布Homebrew公式,因此您可以使用Homebrew软件包管理器安装Elasticsearch 。
  • 要使用Homebrew进行安装,您首先需要点击Elastic Homebrew存储库:
brew tap elastic/tap
  • 点击Elastic Homebrew存储库后,可以brew install用来安装Elasticsearch的默认发行版(要安装OSS发行版,请指定elastic/tap/elasticsearch-oss):
brew install elastic/tap/elasticsearch-full

在docker下安装 Elasticsearch及运行

当然使用docker前,你同样需要先安装docker服务;这里就不介绍如何安装docker篇幅了,请参见我docker相关的文章

  • 获取Elasticsearch镜像
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.7.1
  • docker运行单节点elasticsearch
docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.7.1
  • 要在Docker中启动并运行一个三节点的Elasticsearch集群,可以使用Docker Compose, 创建一个docker-compose.yml文件:
version: '2.2'
services:
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.7.1
    container_name: es01
    environment:
      - node.name=es01
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es02,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - elastic
  es02:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.7.1
    container_name: es02
    environment:
      - node.name=es02
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data02:/usr/share/elasticsearch/data
    networks:
      - elastic
  es03:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.7.1
    container_name: es03
    environment:
      - node.name=es03
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es02
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data03:/usr/share/elasticsearch/data
    networks:
      - elastic

volumes:
  data01:
    driver: local
  data02:
    driver: local
  data03:
    driver: local

networks:
  elastic:
    driver: bridge

ElasticSearch测试

  • Linux and macOS运行,如果是window是.\elasticsearch.bat 命令
cd elasticsearch-7.7.1/bin
./elasticsearch 

按回车键后运行时会出现如下内容,我们由此可以看见我们默认运行的端口号为9200:
[2020-06-17T18:15:19,148][INFO ][o.e.h.AbstractHttpServerTransport] [summerdeMacBook-Pro.local] publish_address {127.0.0.1:9200}, bound_addresses {[::1]:9200}, {127.0.0.1:9200}

这里我们通过curl或者浏览器访问测试是否运行成功;

summerdeMacBook-Pro:~ summer$ curl http://127.0.0.1:9200
{
  "name" : "summerdeMacBook-Pro.local",
  "cluster_name" : "elasticsearch_summer",
  "cluster_uuid" : "91Rh9-woQ_yKMWnmNKLGrA",
  "version" : {
    "number" : "7.7.1",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "ad56dce891c901a492bb1ee393f12dfff473a423",
    "build_date" : "2020-05-28T16:30:01.040088Z",
    "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"
}
summerdeMacBook-Pro:~ summer$ curl http://127.0.0.1:9200/_cat/health?v #检查ES当前运行状态
  • 启动另外两个Elasticsearch实例,以便您可以看到典型的多节点集群的行为。您需要为每个节点指定唯一的数据和日志路径。
./elasticsearch -Epath.data=data2 -Epath.logs=log2
./elasticsearch -Epath.data=data3 -Epath.logs=log3

常见的CURD命令操作
为了测试方便,我们还需要安装一个 Kibana工具,方便可视化操作;Kibana的安装也很简单,下载解压运行即可;

  1. 下载Kibana for Mac版本
    https://artifacts.elastic.co/downloads/kibana/kibana-7.7.1-darwin-x86_64.tar.gz
    其他版本链接如下:
    window版本:https://artifacts.elastic.co/downloads/kibana/kibana-7.7.1-windows-x86_64.zip
    Linux版本:https://artifacts.elastic.co/downloads/kibana/kibana-7.7.1-linux-x86_64.tar.gz
  2. 解压运行bin/kibana即可,我们可以看到运行起来的端口号为5601
  log   [11:13:37.475] [info][listening] Server running at http://localhost:5601
  log   [11:13:37.993] [info][server][Kibana][http] http server running at http://localhost:5601
  1. 访问 http://localhost:5601就进入一个可视化界面操作,功能很多很强大,但我们熟悉ElasticSearch基本操作,用Dev Tools即可,如图所示,可以输入我们需要了解的命令:
    kibana操作界面

创建文档:

PUT /customer/user/1 
{
  "name": "summer"
}
或 
PUT /customer/_doc/1
{
  "name": "summer"
}

查看文档

GET /customer/user/1 或 GET /customer/_doc/1

修改文档

POST /customer/user/1 或 /customer/_doc/1
{
"name": "summer for update"
}
或
POST /customer/_doc/1
{
"name": "summer for update"
}

删除文档

DELETE /customer/user/1 或 DELETE /customer/_doc/1

注意以上操作都可以执行成功,但在最新版本中有警告
#! Deprecation: [types removal] Specifying types in document index requests is deprecated, use the typeless endpoints instead (/{index}/_doc/{id}, /{index}/_doc, or /{index}/_create/{id}).

意思是不推荐使用:[类型删除]不推荐在文档索引请求中指定类型,建议使用以下方式改用/{index}/_doc/{id}访问,更多功能介绍期待下一篇,下次见!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

52it.club

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值