2018/2/5 ELK技术栈之ElasticSearch学习笔记
npm config set registry https://registry.npm.taobao.org
npm config get registry
支持跨域访问
http.cors.enabled: true
http.cors.allow-origin: "*"
一个异常加上
node.max_local_storage_nodes: 256
ElasticSearch是一个基于Lucence的搜索服务器.
它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.
相比于solr可以使用xml,csv,json等进行交互,ElasticSearch只能用json进行交互;
与lucence和solr创建索引时以一个域名和分词后的其值(组合起来教term)作为索引不同的是,ElasticSearch里静态词意的索引并不针对于term建立索引.而是一个类似数据库的逻辑命名空间;
动态词意上则可以称作将某个文档放到索引里;
再细化后就是Type,可以理解为表.
再细化后就是Document,相当于一行数据(这个倒是跟lucence和solr差不多).
最基础的单元就是field,相当于一列数据.
Shards(分片(每一个分片都是一个luncence实例,是一个完整的搜索引擎,但我们不直接与它通信)),ElasticSearch能自动根据节点的增加动态调整复制分片.这也是为什么说ElasticSearch天生就是分布式的原因之一,
ElasticSearch可以将一个索引分成若干个存到集群中的Node中(分片的数量是在建立索引时就需要确定的,但不用担心节点扩容和缩小的问题,ElasticSearch可以自动根据你的节点数量来迁移分片).
replicas(复制)见其名知其义,就是将索引复制一份或者多份,作为副本(复制单元是分片,本身有算法能保证不会有相同分片在同一个节点上,并且复制分片在主分片没有出问题的情况下,只负责读,读针对于客户端发来的请求以及从其它的分片中读取更新的文档).
在ElasticSearch中映射Mapping不需要定义映射类型,在我们存入第一行json时会自动根据我们存入的数据类型而确定其数据类型.
MasterNode负责整理和管理元信息;
DataNode负责存储和响应数据;
任何一个节点都是一个ElaticSearch实例,任何一个节点都可以接受客户端的请求,并能从元信息中获取到具体数据所在的节点,之后将请求转发到存在文档的对应节点上,之后收集各个节点返回的数据,最后一起返回给客户端;
与ElasticSearch服务端交互的三种方式:
一:节点客户端
ClientNode会作为一个非数据节点加入到集群中,它本身不保存任何数据,但ClientNode拥有元信息,这样当用户发来请求后ClientNode能根据元信息中的索引信息到对应的DataNode节点上进行数据请求;
二:传输客户端
不会加入集群,但可以把请求转发到集群中的一个节点上;
三:使用RESTful API进行交互
这个没什么说的,任何语言都可以使用json通过RESTful API与ElasticSearch服务进行交互.Linux则是通过curl命令(Linux下用来模拟http请求的技术)来进行交互;
ElaticSearch数据格式:
String:text/keyword(这两个的区别在于text会默认进行分词,而keyword则相反)
Number:六种数据类型:byte,short,Integer,long,double,float
data:这个可以自定义,比如,yyyy-MM-dd HH:mm:ss(默认类型为:strict_date_optional_time||epoch_millis)
boolean:布尔值
ip:(ipv4和ipv6都支持)
geo_point:地图坐标
nested:嵌套类型
object:json对象
binary:二进制
ElasticSearch集群分为三个状态,使用/_cluster/health可查询
green:所有主分片和副本分片都正常运行
yellow:不是所有的副本分片都正常,但主分片都正常
red:有主分片不正常并且没有副本分片能替代它(如果某一个主分片异常了,ElasticSearch能检测到,并升级对应的副本分片为主分片,在其恢复正常后,会重新将副本分片的数据重新导入给原主分片)
ElasticSearch模板和mapping索引字段类型映射:
mapping字段映射分为三种状态:1.dynamic:strict 2.dynamic:no 3.dunamic:true
第一种状态为严格的按照创建索引时指定的字段类型进行映射,如果你添加了非此类型的也不会报错,但是其不会被索引
第二种和第一种相同;
第三种就是动态的,你也可以在创建索引时指定,在之后你新增的类型字段会自动根据其类型加上映射索引字段
模板的意思就如同字面上一样,预定义一个模板,在之后可以指定这个模板,或者使用通配符自动为索引配置此模板里定义好的参数信息;
mapping和模板都可以使用通配符进行自动匹配,一般情况下是配合使用;mapping还可以使用match自动为某个字段定义类型;
并且模板可以设置order属性自定义优先级(order值越大优先级越高);