ES学习
1. 安装
1.1 ES 安装配置
curl -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.1.2.tar.gz
tar xvf elasticsearch-5.1.2.tar.gz
ln -s elasticsearch-5.1.2 elasticsearch
修改conf/elasticsearch.yaml文件,参考下面的文件
修改句柄 vm.max_map_count
sudo vim + /etc/sysctl.conf 添加一行 vm.max_map_count = 262144
sysctl -p 生效修改(查看more /proc/sys/vm/max_map_count)
临时修改 sysctl -w vm.max_map_count=262144
启动ES ./bin/elasticsearch -d
- 验证ES安装 curl 'http://localhost:9200/?pretty'
- 验证ES集群状态 curl 'http://10.9.81.198:9200/_cluster/nodes?pretty'
# ---------------------------------- Cluster(edit)-----------------------------------
cluster.name: tracing-es
# ------------------------------------ Node(edit) ------------------------------------
node.name: es01
#node.attr.rack: r1
# ----------------------------------- Paths ------------------------------------
#path.data: /path/to/data
#path.logs: /path/to/logs
# ----------------------------------- Memory -----------------------------------
#bootstrap.memory_lock: true
# ---------------------------------- Network(edit, 绑定所有)-----------------------------------
network.host: 0.0.0.0
http.port: 9200
# --------------------------------- Discovery(edit)-------------------------------
discovery.zen.ping.unicast.hosts: ["10.10.73.25", "10.10.73.34", "10.10.66.134"]
discovery.zen.minimum_master_nodes: 1
# ---------------------------------- Gateway -----------------------------------
#gateway.recover_after_nodes: 3
# ---------------------------------- Various(add)-----------------------------------
#action.destructive_requires_name: true
http.cors.enabled: true
http.cors.allow-origin: "*"
1.2 ES-Head 安装配置
es5.0之后不能通过.bin/plugin install mobz/elasticsearch-head安装
- 安装nodejs, 配置环境变量
- 安装npm(taobao npm)
- 安装grunt npm install grunt --save
- 修改head的配置Gruntfile.js
- npm install
- 启动服务:./bin/grunt server
- 访问:http://10.9.31.213:9100
es-head安装遇到的问题,显示集群链接不上,解决方法(第3点重要):
1、修改head源码:目录:head/Gruntfile.js,connect下增加hostname属性,设置为*
2、修改连接地址:目录:head/_site/app.js,修改head的连接地址:this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://localhost:9200";把localhost修改成你es的服务器地址
3、修改elasticsearch的参数:编辑config/elasticsearch.yml:增加新的参数,这样head插件可以访问es 注意,设置参数的时候:后面要有空格! and
http.cors.enabled: true
http.cors.allow-origin: "*"
1.3 ES-Kibana 安装配置
启动方法
设置时区
Management->Advanced Settings
设置:tz->Asia/shanghai
1.4 ES-bigdesk 安装
1. 本地下载bigdesk
2. 打开index.html页面
3. 修改BigdeskStore.js, 定位到142行,major == 1改成major >=1
4.
2. ES基础知识
2.1 ES数据类型
- string相关的:text
- 数字相关的:long, integer, short, byte, double, float
- Boolean类型: boolean
- 二进制:binary
- 范围: integer_range, float_range, long_range, double_range, date_range
- 地理数据:geo_point, geo_shape
- token_count: count the number of tokens in a string
- completion to provide auto-complete suggestions
3. ES搜索
3.1 简易搜索
搜索_all字段,_all字段是所有字段集合
GET /index/type/_search?q=xxx
GET /index/type/_search?q=user:xxx
3.2 bool query
bool query对应的是lucene的boolquery
- must: 多个条件完全匹配, 相当于and
- filter: 字段必须匹配,不考虑score
- should: 至少匹配一个,相当于or
- must_not: 多个条件相反匹配,相当not
GET /_search
{
"query": {
"bool": {
"must": {
"term" : { "user" : "kimchy" }
},
"must_not": {
"term" : { "name" : "kimchy" }
},
"should" : {
{ "term" : { "tag" : "elasticsearch" } }
},
"filter": {
"term": { "content": "update" }
}
}
}
}
3.3 match query
match查询语句会进行分词,搜索
GET /_search
{
"query": {
"match": {
"title": "my first"
}
}
}
3.4 term query
term(项,分词最小项)表示完全匹配,查询语句不进行分词,文档中必须包含整个搜索的词
term:过滤,精确匹配
GET /_search
{
"query": {
"match": {
"title": "my first"
}
}
}
3.5 range query
range: 范围查询
GET /_search
{
"query": {
"range": {
"age": {
"gt":20,
"lt":30
}
}
}
}
3.6 过滤和查询的区别
过滤: 特定词和文档是否匹配,范围匹配,不考虑score,可以走缓存
查询: 特定词和文档过滤值匹配程度,考虑score,不能走缓存
3.7 处理控制
exists: tags字段有值的都会被返回
GET /my_index/posts/_search
{
"query" : {
"filtered" : {
"filter" : {
"exists" : { "field" : "tags" }
}
}
}
}
missing: 该字段没有值的都会返回
GET /my_index/posts/_search
{
"query" : {
"filtered" : {
"filter": {
"missing" : { "field" : "tags" }
}
}
}
}
4. ES Index管理
4.1 新建索引
put /myindex
{
"settings":{
"index" : {
"number_of_shards" : 3, //主分片数量
"number_of_replicas" : 2 //每个主分片的复制分片数量
}
},
"mappings":{
"mytype":{
"properties":{
"filed_a":{"type":"text/integer"}
}
}
}
}
ES深入分片
per-segment机制(动态索引)
Lucene中的索引是段(segment)集合,segment具有完整功能的倒排索引,一个segment可以包含多个文档,在文档初始写入时独占一个segment。
一个per-segment search如下工作
Lucene中的索引是ES的中的一个分片,ES中的索引是分片集合
- 新的文档首先写入内存区的索引缓存
- 同时这些buffer被提交:
- 一个新的段——额外的倒排索引——写入磁盘
- 新的提交点写入磁盘,包括新段的名称
- 磁盘是fsync’ed(文件同步)——所有写操作等待文件系统缓存同步到磁盘,确保它们可以被物理写入
- 新段被打开,它包含的文档可以被检索
- 内存的缓存被清除,等待接受新的文档