Elasticsearch学习(一)——入门基础

开源的Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选。它可以快速地储存、搜索和分析海量数据。维基百科、Stack Overflow、Github 都采用它。

最近在工作上使用到了Elasticsearch全文搜索引擎,打算系统学习一下,出一个系列相关的文章,欢迎大家一起讨论。

一、简介

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful Web接口。同时Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。

Lucene与Elastic

Lucene是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会支持和提供。Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。在Java开发环境里Lucene是一个成熟的免费开源工具。想要使用它,你必须使用Java来作为开发语言并将其直接集成到你的应用中,因为Lucene非常复杂,所以你需要深入了解检索的相关知识来理解它是如何工作的。

Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。

Elastic能够解决的问题
  • 1.数据库字段太多,查询太慢,索引没有办法再做优化
  • 2.数据库一个count就拖死全表
  • 3.mysql的limit翻到几十几百万页后实在是太慢
  • 4.数据库like实在太慢,每次like整个服务器cpu内存飙高,拖慢整个线上服务
  • 5.想要对外/内提供db里的数据的全文检索服务
  • 6.提供日志(程序运行)查询功能

二、基本概念

1、集群(Cluster)

集群是一个或多个节点(服务器)的集合,它们共同保存您的整个数据,并提供跨所有节点的联合索引和搜索功能。群集由唯一名称标识,默认情况下为“elasticsearch”。

2、节点(Node)

节点是作为群集一部分的单个服务器,存储数据并参与群集的索引和搜索功能。

3、索引(Index)

索引是具有某些类似特征的文档集合。索引由名称标识(必须全部为小写),并且此名称用于在对其中的文档执行索引,搜索,更新和删除操作时引用索引。

4、类型(Type)

一种类型,曾经是索引的逻辑类别/分区,允许您在同一索引中存储不同类型的文档,例如一种类型用于用户,另一种类型用于博客帖子。(在6.0.0中弃用,尽量不要使用该类型)

5、文档(Document)

Index 里面单条的记录称为 Document(文档)。许多条 Document 构成了一个 Index。文档是可以编制索引的基本信息单元。该文档以JSON(JavaScript Object Notation)表示,JSON是一种普遍存在的互联网数据交换格式。在索引中,您可以根据需要存储任意数量的文档

6、碎片/分片(Shards)

当索引存储的大量数据超过单个节点的硬件限制的数据。Elasticsearch提供了将索引细分为多个称为分片的功能。索引被水平细分为碎片。这意味着每个碎片包含文档的所有属性,但包含的数量比索引少。当你查询的索引分布在多个分片上时,ES会把查询发送给每个相关的分片,并将结果组合在一起,而应用程序并不知道分片的存在。即:这个过程对用户来说是透明的。

7、副本(Replia)

每个索引可以拆分为多个分片。索引也可以复制为零(表示没有副本)或更多次。复制后,每个索引都将具有主分片(从中复制的原始分片)和副本分片(主分片的副本)。
副本是一个分片的精确复制,每个分片可以有零个或多个副本。ES中可以有许多相同的分片,其中之一被选择更改索引操作,这种特殊的分片称为主分片。 当主分片丢失时,如:该分片所在的数据不可用时,集群将副本提升为新的主分片。

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

默认情况下,Elasticsearch中的每个索引都分配了一个主分片和一个副本,这意味着如果群集中至少有两个节点,则索引将具有一个主分片和另一个副本分片(一个完整副本),总共两个每个索引的分片。

三、安装

本文安装的elasticsearch是基于最新版7.0版本,在ubuntu 16.04下面测试,其他版本的安装也大同小异。

1、JAVA环境

因为Elasticsearch是使用Java语言,所以需要安装JDK,官方推荐是Java 1.8版本或以上。Java环境的安装就不再叙述,这个比较简单。

java

2、安装Elasticsearch

下载Elasticsearch二进制文件,放入指定目录,运行即可。

Elasticsearch各版本下载地址

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.0.0-linux-x86_64.tar.gz
tar -xzvf elasticsearch-7.0.0-linux-x86_64.tar.gz
cd elasticsearch-7.0.0/

这里有几个坑需要注意:

Elasticsearch不能以管理员身份root启动,所以我们创建elasticsearch用户组和用户,并给相应文件目录更改所有人和组。

groupadd elasticsearch  
useradd -g elasticsearch  elasticsearch  
chown elasticsearch:elasticsearch -R elasticsearch-7.0.0

然后我们切换用户su elasticsearch尝试启动,在elasticsearch-7.0.0目录下,执行启动命令./bin/elasticsearch

memory

这里报错是内存大小不够,所以我们需要更改文件/config/jvm.options。默认大小为1g,更改218m。如下:

# Xms represents the initial size of total heap space                                                                                   
# Xmx represents the maximum size of total heap space                                                                                   
                                                                                                                                        
#-Xms1g                                                                                                                                 
#-Xmx1g                                                                                                                                 
                                                                                                                                        
-Xms218m                                                                                                                                
-Xmx218m      

里面分配的内存的最大值为218MB和最小值218MB,当然可以根据自己的机器情况设置内存大小。

然后我们再次启动应用,可以发现相关的提示信息,在相应端口应用启动了。

info

我们也可以通过ps -ef | grep "elasticsearch",也可以查看到相应信息。

grep

当我们按住Ctrl-C可以终止掉进程。。

如果我们要后台进程运行程序,可以执行命令:

./bin/elasticsearch -d -p pid

这里-d表示后台运行,-p记录进程id。信息保存在$ES_HOME/logs/ 目录。$ES_HOME就是指Elasticsearch文件目录。

命令验证curl http://127.0.0.1:9200/
curl

现在我们只能通过localhost来访问,如果想要绑定外网地址,需要更改一些配置,编辑文件config/elasticsearch.yml,如下:

# 集群名称,当同一个网段具有多个elasticsearch集群时cluster.name就成为同一个集群的标识.
cluster.name: es-application

# 节点名称,同一个集群节点名称不能重复.
node.name: node-1

# 是否允许一个节点是否可以成为一个master节点,es是默认集群中的第一台机器为master,如果这台机器停止就会重新选举master
node.master: true 

# 允许该节点存储数据(默认开启) 
node.data: true 

# 绑定监听IP
network.host: 0.0.0.0

# 设置节点间交互的tcp端口,默认是9300
transport.tcp.port: 9300

# 设置节点间交互地址
transport.host: localhost

# 设置对外服务的http端口,默认为9200
http.port: 9200 

# 集群默认主节点
cluster.initial_master_nodes: ["node-1"]

更详细的配置,可以参考官方文档

然后我们重新启动,在浏览器里面访问外网IP,可以得到我们服务信息。

web info

关于Windows下的安装也差不多,下载相应Windows下的二进制包,进入目录下,启动bat命令即可。

.\bin\elasticsearch.bat

参考

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值