Elasticsearch安装
可以到官网下载很快的,懒的同学可以使用下面的传送门
es2.4.2 安装包 :https://pan.baidu.com/s/1c2hM6J2 lduh
es6.0.1 安装包 :https://pan.baidu.com/s/1dFIYshV fq70
本人习惯把相关东西都解压到/usr/local/文件夹下:
#tar zxvf es下载路径 es安装路径
#例如
tar zxvf ~/Downloads/elasticsearch2.4.2.tar.gz /usr/local/
cd /usr/local
mv elasticsearch2.4.2 elasticsearch
下一步添加环境变量方便启动elasticsearch
sudo vim /etc/profile
#添加如下行,并修改PATH变量
export ES_HOME=/usr/local/elasticsearch
export PATH=$PATH:$ES_HOME/bin
#保存
source /etc/profile
安装elasticsearch插件让我们可以在浏览器访问:
cd $ES_HOME/bin
plugin -install mobz/elasticsearch-head
#启动es
elasticsearch
然后就可以在浏览器打开 localhost:9200/_plugin/head 来查看es相关信息啦
在学习过程中遇到很多大坑,明明照着网上做,为啥就是跟人家的不一样!!!苍天啊,大地啊,又特么浪费好长时间,感觉学习就是不断填坑的过程,首先,先说一下在网上看教程的时候要注意对方用的版本版本版本!ES2和ES6有很大的改动。
ES基础知识
索引(index)
索引可以看成是一个具有相似特征的元素集合,举个例子:
fruits -> {apple,banana,cherry,······}
这个fruits就是一个索引,就好比说在千千万万的数据中,我要查和水果有关的东西,那我只需要在fruits这个索引下查询相关信息而不需要查询整个数据集。需要注意的是索引的名字必须为小写字母,小写字母,小写字母,千万不要手欠使用驼峰写法,血的教训。
类型(type)
类型,我的理解就是将一块大饼分成小饼的操作,在之前的例子中对应的就是我们的水果的名字,如 apple,banana,cherry。就是把水果这个再细分。
不过这个“类型“将会在7.0版本中完全移除,在6.0中已经被废弃了。官方解释的原因大概如下:
首先我们先创建一个索引
curl -XPUT localhost:9200/fruits
新建一个名为apple的类型(type),它包含一个字段 “price”类型为string
curl -XPUT localhost:9200/fruits/_mapping/apple -d '{ "apple":{ "properties":{ "price":{ "type":"string" } } } }'
再次新建一个名为cherry的类型(type),它包含一个字段 “price”类型为date
curl -XPUT localhost:9200/fruits/_mapping/cherry -d '{ "cherry":{ "properties":{ "price":{ "type":"date" } } } }'
我们会得到一个exception如下:
{ "error": {"root_cause": [{ "type":"illegal_argument_exception", "reason":"mapper [price] of different type, current_type [string], merged_type[date]" }], "type":"illegal_argument_exception", }, "status":400 }
大概的意思就是你都给我定义了一个string类型了,又给我改成date类型干毛!然后es不干了,罢工!!!(让我想起了法国人。。。),究其原因是因为apple的price字段和cherry的price字段存在完全相同的映射中所以他们的类型不一样就会引起错误!!所以我们在将来的7.0版本中将完全移除TYPE这个东西。
同时,在老版本使用中也要注意这个问题,相同索引中不同类型的同名字段是存在同一个映射中,所以要非常小心。
文档(document)
文档的理解就数据,我们存的东西,一条文档就是一条数据!
就是把一个很大的数据分成很多个小部分,每个部分就是一个分片(shard),每一个shard都可以完成查询任务,默认数量为5,在索引创建以后就不能修改这个数量了,所以要在创建的时候想好分片数量,副本就是对每个分片的复制,作为冗余数据存储,保证在单点故障的情况下,ES可以不丢失数据并且正常工作。