Elasticsearch入门(一)

一.什么是Elasticsearch?

Elaticsearch,简称为es, es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。es也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单.

ElasticSearch对比solr?

Solr 利用 Zookeeper 进行分布式管理,而 Elasticsearch 自身带有分布式协调管理功能;
Solr 支持更多格式的数据,而 Elasticsearch 仅支持json文件格式;
Solr 官方提供的功能更多,而 Elasticsearch 本身更注重于核心功能,高级功能多有第三方插件提供;
Solr 在传统的搜索应用中表现好于 Elasticsearch,但在处理实时搜索应用时效率明显低于 Elasticsearch

二.启动与安装

1、下载ElasticSearch的安装包

https://www.elastic.co/products/elasticsearch

2、安装ElasticSearch服务

​ 解压即安装完毕

3、启动ElasticSearch服务

​ 点击ElasticSearch下的bin目录下的elasticsearch.bat启动服务

​ 然后访问 http://localhost:9200/

当ElasticSearch的节点启动后,它会利用多播(multicast,一种网络广播方式)寻找集群中的其它节点,并与之建立连接。

发现机制?

Zen 发现机制是ElasticSearch中默认的用来发现新节点的功能模块,而且集群启动后默认生效。Zen发现机制默认配置是用多播来寻找其它的节点。对于用户而言,这是一极其省事的解决方案:只需启动新的ElasticSearch节点即可,如果各个模块工作正常,该节点就会自动添加到与节点中集群名字(cluster.name)一样的集群,同时其它的节点都能感知到新节点的加入。如果节点添加不进去,你就应该检查节点的publish_host属性或者host属性的设置,来确保ElasticSearch在监听合适的网络端口。
在比较大的集群中,多播发现机制可能会产生太多不必要的流量开销,这是不使用多播的一个充分理由。在这种情况下,Zen发现机制引入了第二种发现节点的方法:单播模式。

4、安装ElasticSearch的图形化界面插件

4.1、安装图形化界面head插件

解压elasticsearch‐head‐master.zip到任意目录

4.2、安装nodejs程序

Grunt和所有grunt插件都是基于nodejs来运行的

4.3、grunt安装为全局命令

Grunt是一个基于JavaScript上的一个很强大的前端自动化工具基于NodeJS用于自动化构建、 测           试、生成文档的项目管理工具。
cmd控制台中输入: npm install ‐g grunt‐cli

4.4、设置允许elasticsearch跨越访问

#修改elasticsearch‐5.6.8\config下的elasticsearch.yml文件:
# 开启跨域访问支持,默认为false
http.cors.enabled: true
# 跨域访问允许的域名地址
http.cors.allow-origin: "*"

4.5、cmd命令进入elasticsearch-head-master目录,启动head图形化界面程序:

grunt server

​ 如果grunt server不好用:

cmd进入到head目录中执行npm install
然后再执行 grunt server

4.6、测试查询

http://localhost:9100

4.7、注意:

*使用java代码通过 9300 访问Es服务器
*使用浏览器通过 9200

三、ElasticSearch的核心概念

1、概述

ElasticSearch是面向文档(document)的,意味着他可以存储整个对象或者文档,还会对文档的内容进行索引的创建,使文档可以被搜索到。

2、核心概念

2.1、接近实时的NRT

ES是一个近实时的搜索平台,也就是索引一个文档到这个文档能被搜索到会有轻微延迟(通常为1秒)。
索引会先写入内存,然后在写入磁盘。

2.2、集群 cluster

一个集群就是由一个或多个节点组织在一起,他们共同持有整个数据,并一起提供索引和搜索功能。一个集群由一个唯一的名字标识,这个名字默认就是“elasticSearch”。集群的名字很重要,集群内的节点只能通过制定集群的名字来加入集群。

2.3、节点 node(相当于数据库服务器)

1、一个节点就是集群中的一个服务器,作为集群的一部分,节点存储数据,参与集群的索引和搜索功能。一个节点是由一个【节点名】来标识的,节点名一个随机字符串。默认情况下,节点名是由ElasticSearch服务在节点第一次启动的时候随机生成,之后这个节点就会一直使用这个节点名。
2、节点通过配置集群名字来加入集群,默认情况下,节点会寻找集群名为“elasticSearch”的集群中。意味着:如果同一网络中启动了若干个节点,并且没有修改默认配置,那么这些节点可以互相发现彼此,并形成一个叫做“elasticSearch”的集群
当网络中只有一个节点时,会默认创建并加入“elasticSearch”的集群
当然节点加入的集群名可以在节点的配置文件中进行修改

2.4、索引 index (相当于库) 名词

1、一个索引实际上是一个“逻辑命名空间”,是文档的集合。一个索引由索引名字来标识,名字必须【小写字母】。我们在进行文档的索引(动词)、搜索、更新、删除的时候,都要用索引名。在一个集群中,可以定义多个索引
2、索引存储在多个分片中,其中每一个分片都是一个独立的 Lucene Index。这就应该能提醒你,添加新 index 应该有个限度:每个 Lucene Index 都需要消耗一些磁盘,内存和文件描述符。因此,一个大的 index 比多个小 index 效率更高:Lucene Index 的固定开销被摊分到更多文档上了
3、在搜索时,每个分片都需要搜索一次, 然后 ES 会合并来自所有分片的结果。例如,你要搜索 10 个 index,每个 index 有 5 个分片,那么协调这次搜索的节点就需要合并 5x10=50 个分片的结果。这也是一个你需要注意的地方:如果有太多分片的结果需要合并,或者你发起了一个结果巨大的搜索请求,合并任务会需要大量 CPU 和内存资源。

2.5、类型 type (相当于表)

在一个索引中,可以定义多个类型。类型是对文档的逻辑分类
在ElasticSearch5.X的版本中支持一个索引下有多个type

2.6、文档 document (相当于一条数据)

文档是ElasticSearch的基本单位。在Es中文档以JSON格式来表示

2.7、属性 field (相当于字段)

字段是文档中的属性,需要对每一个属性定义索引和被搜索的方式

2.7.1、数据类型:

字符串类型:string;text
数值类型:字节(byte)、2字节(short)、4字节(integer)、8字节(long)、float、double;
布尔类型:boolean,值是true或false;
时间/日期类型:date,用于存储日期和时间;
二进制类型:binary;
IP地址类型:ip,以字符串形式存储IPv4地址;
特殊数据类型:token_count,用于存储索引的字数信息

2.7.2、公共属性:

index:该属性控制字段是否编入索引被搜索,该属性共有三个有效值:analyzed、no和not_analyzed:
    analyzed:表示该字段被分析,编入索引,产生的token能被搜索到;
    not_analyzed:表示该字段不会被分析,使用原始值编入索引,在索引中作为单个词;
    no:不编入索引,无法搜索该字段;
    其中analyzed是分析,分解的意思,默认值是analyzed,表示将该字段编入索引,以供搜索。
store:指定是否将字段的原始值写入索引,默认值是no,字段值被分析,能够被搜索,但是,字段值不会存储,    这意味着,该字段能够被查询,但是不会存储字段的原始值。
boost:字段级别的助推,默认值是1,定义了字段在文档中的重要性/权重;
include_in_all:该属性指定当前字段是否包括在_all字段中,默认值是ture,所有的字段都会包含_all字段   中;如果index=no,那么属性include_in_all无效,这意味着当前字段无法包含在_all字段中。
copy_to:该属性指定一个字段名称,ElasticSearch引擎将当前字段的值复制到该属性指定的字段中;
doc_values:文档值是存储在硬盘上的索引时(indexing time)数据结构,对于not_analyzed字段,默认值   是true,analyzed string字段不支持文档值;
fielddata:字段数据是存储在内存中的查询时(querying time)数据结构,只支持analyzed string字段;
null_value:该属性指定一个值,当字段的值为NULL时,该字段使用null_value代替NULL值;在ElasticSearch中,NULL 值不能被索引和搜索,当一个字段设置为NULL值,ElasticSearch引擎认为该字段没   有任何值,使用该属性为NULL字段设置一个指定的值,使该字段能够被索引和搜索。

2.8、分片 和 复制

2.8.1、概念与作用

分片:就是把索引数据切分成多个小的索引块,这些小的索引块能够分发到同一个集群中的不同节点。

ElasticSearch集群通过把数据分发到多个存储Lucene索引的物理机上,达到能够存储超出单机容量的信息这一目的。这个分发的过程称为索引分片(Sharding)。在ElasticSearch集群中,索引分片(Sharding)是自动完成的,而且所有分片索引(Shard)是作为一个整体呈现给用户的。

整体呈现可以这样理解:当你查询的索引分布在多个分片上时, Elasticsearch会把查询发送给每个相关的分片,并将结果【合并】在一起,而应用程序并不知道分片的存在。
索引数据的操作只会发生在主分片上(primary shard)上,不会发生在分片的副本上。

Elasticsearch索引是由一个或多个分片组成的,每个分片包含了文档集的一部分。采用Elasticsearch默认设置时,索引结束后将得到5个分片及对应的副本。“副本”(replica)意味着每一个分片都有自己的分片副本(copy),所以实际上有5个分片和5个相应分片副本。

2.8.2、选择合适的分片数

如果数据集的大小有限制而且严格定义好的,可以只使用一个分片。如果不是的,大拇指法则表明最佳的分片数量取决于节点数量。所以,如果计划将会到10个节点,那么就需要配置10个分片。需要记住的重点是:考虑到高可用性和吞吐量,分片副本也是需要声配置的。分片副本像普通分片一样也占用空间。如果为每个分片指定一个拷贝(number_of_shards =1 ),那么就需要20个分片:10个主分片和10个分片副本。这个简单的公式可以总结如下:
Max number of nodes = Number of shards * (number of replicas +1)
换句话说,如果你计划用10个分片和2个分片副本,那么最大的节点数是30。

2.9、mapping映射

mapping定义了文档中的每一个field如何被索引和被查询到

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

奋斗的小巍

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

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

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

打赏作者

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

抵扣说明:

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

余额充值