ES的基本操作

定位查询语句语法问题的API

GET _validate/query?explain

查看热点线程的命令

curl -X GET "localhost:9200/_nodes/hot_threads"

开启日志记录传入传出的请求

PUT _cluster/settings
{
   "transient" : {
      "logger.org.elasticsearch.transport.TransportService.tracer" : "TRACE"
   }
}

只记录走9300的tcp请求

如果要关闭的话,将日志级别改成INFO,如下:

PUT _cluster/settings
{
   "transient" : {
      "logger.org.elasticsearch.transport.TransportService.tracer" : "INFO"
   }
}

官方手册:https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-transport.html

怎么查看等待执行的集群任务

通过以下命令查看等待执行的集群任务总数

/_cluster/health

返回中的number_of_pending_tasks字段就是任务总数

通过以下命令查看等待执行的具体任务是什么

/_cluster/pending_tasks 或  /_cat/pending_tasks

如何关闭es mapping自动推导数据类型

PUT /_settings 
{
  "index.mapper.dynamic":false
}

设置聚合查询bucket 限制

注意:es6之后才支持
动态修改:
PUT _cluster/settings { “persistent”: { “search.max_buckets”: 20000 } }
经常修改:
编辑elasticsearch.yml
添加search.max_buckets: 20000

安全相关

安装searchGuard后如何通过curl访问

curl -u用户名:密码  http://ip:9200

reindex 的使用

首先目标索引targetindex 需要创建好,reindex不会帮你创建目标索引的

{
  "source": {
    "index": "sourceindex",
    "size": 10000  //每批插入数据的量
  },
  "dest": {
    "index": "targetindex"
  }
}

段相关

查看一个node上所有segment占用的memory总和

一个Lucene段就是一个完整的倒排索引,倒排索引由单词词典和倒排列表组成。在Lucene中,单词词典中的FST结构会被加载到内存。因此每个段都会占用一定的内存空间。可以通过下面API来查看某个节点上所有段占用的内存总量。

curl http://192.168.58.158:9200/_cat/nodes?v&h=segments.count,segments.memory,segments.index_writer_memory,segments.version_map_memory,segments.fixed_bitset_memory

修改merge的线程数

curl -XPUT  -H "Content-Type:application/json" 'http://localhost:9200/_all/_settings' -d '{

  "index.merge.scheduler.max_thread_count" : "1",
}'

段合并

POST
_forcemerge?max_num_segments=1

配置熔断器

PUT   http://localhost:9200/_cluster/settings
{
  "persistent": {
    "indices.breaker.fielddata.limit": "15%",
    "indices.breaker.request.limit": "15%",
    "indices.breaker.total.limit": "10%"
  }
}

指定分片查询

指定查询副本分片

curl localhost:9200/_search?preference=_replica 

指定查询主分片

curl localhost:9200/_search?preference=_primary

指定查询指定节点上的分片

curl localhost:9200/_search?preference=_only_node:xyz

more

https://www.elastic.co/guide/en/elasticsearch/reference/2.3/search-request-preference.html

如何查看文档的version

在查询的_search后加上?version, 查询返回的结果中就会带上version字段

加快分片恢复速度

PUT _cluster/settings

{
    "persistent": {
        "cluster.routing.allocation.node_concurrent_recoveries": 10,
        "indices.recovery.max_bytes_per_sec": "40mb"
    }
}

加快分片rebalance速度

PUT _cluster/settings

{
    "persistent": {
        "cluster.routing.allocation.cluster_concurrent_rebalance": 10
    }
}

查询缓存

curl 'localhost:9200/my_index/_search?request_cache=true' -d'
{
  "size": 0,
  "aggs": {
    "popular_colors": {
      "terms": {
        "field": "colors"
      }
    }
  }
}
'

request cache只能缓存size=0的查询
开启request cache
在配置文件中加如下:

index.requests.cache.enable: true
curl -XPOST 'localhost:9200/kimchy,elasticsearch/_cache/clear?request_cache=true'

清空缓存

分词查询

查看分词的命令, ES配置完成后需要测试分词,看看分词是否达到预期效果。

curl 命令查看:

  1. 使用自定义的分析器查看分词:ansj_index_synonym:自定交分析器名称. pretty :json格式显示

curl -XGET ‘http://localhost:8200/zh/_analyze?analyzer=ansj_index_synonym&pretty’ -d ‘童装童鞋’

  1. 使用自定义的分词器(tokenizer)和过滤器(filters)查看分词:

curl -XGET ‘http://localhost:8200/zh/_analyze?tokenizer=ansj_index&filters=synonym&pretty’ -d ‘童装童鞋’

  1. 查询某个字段的分词:

curl -XGET ‘http://localhost:8200/zh/_analyze?field=brand_name&pretty’ -d ‘童装童鞋’

“brand_name”:字段名称,如果是字段是nest,object类型,也可以写成"brand_name. name"

修改index.max_result_window

curl -XPUT 192.168.40.31:9200/_all/_settings -d '{ "index.max_result_window" :"1000000"}'

如何设置磁盘空间告警线

PUT _cluster/settings
{
  "transient": {
    "cluster.routing.allocation.disk.watermark.low": "100gb",
    "cluster.routing.allocation.disk.watermark.high": "50gb",
    "cluster.routing.allocation.disk.watermark.flood_stage": "10gb",
    "cluster.info.update.interval": "1m"
  }
}

如何查看集群的setting

http://127.0.0.1:9200/_cluster/settings

查看文件句柄数量

http://127.0.0.1:9200/_nodes/stats/process?pretty

refresh操作可以通过API设置:

PUT /index/_settings

{“refresh_interval”: “10s”}

修改索引的副本个数

PUT index01/_settings

{

    "number_of_replicas": 2

}

开启慢查询日志

http://127.0.0.1:9200/index/_settings
{
     "index.search.slowlog.threshold.query.warn" : "10s", 
     "index.search.slowlog.threshold.fetch.debug": "500ms", 
     "index.indexing.slowlog.threshold.index.info": "5s" 
}

监控和查看集群状态

查看集群各节点内存使用情况

http://127.0.0.1:9200/_cat/nodes?v&h=name,port,sm

查看集群的健康状态

http://127.0.0.1:9200/_cat/health?v

查看集群的索引数

http://127.0.0.1:9200/_cat/indices?v
// 只显示状态为黄色的
GET /_cat/indices?v&health=yellow
// 根据文档数降序排列
GET /_cat/indices?v&s=docs.count:desc
// 显示每个索引占的内存
GET /_cat/indices?v&h=i,tm&s=tm:desc

查看集群所在磁盘的分配状况

http://127.0.0.1:9200/_cat/allocation?v

查看集群的节点

http://127.0.0.1:9200/_cat/nodes?v

查看别名,路由

http://127.0.0.1:9200/_cat/aliases?v

查看文档数量

http://127.0.0.1:9200/_cat/count?v

查看fieldData的大小

GET /_cat/fielddata?v
// 查看指定的字段
GET /_cat/fielddata?v&fields=body
GET /_cat/fielddata/body,soul?v

查看节点上fielddata

curl -X GET "localhost:9200/_cat/nodes?v&h=fielddata.memory_size"

查看主节点

GET /_cat/master?v

分片的恢复情况

GET _cat/recovery?v

查看集群的其它信息

http://127.0.0.1:9200/_cat/

创建索引

Method:PUT
http://192.168.237.130:9200/people
{
	"settings":{
		"number_of_shards": 3,
		"number_of_replicas": 1
	},
	"mappings":{
		"man":{
			"properties":{
				"name": {
					"type":"text"
					
				},
				"country": {
					"type":"keyword"
				},
				"age":{
					"type":"integer"
				},
				"date":{
					"type":"date",
					"format":"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
				}
			}
		}
	}
	
}

注意:5.x版本中索引创建支持多个type,但是在6.x中只能有一个,不然会报错!
#插入文档
####指定ID插入

Method:PUT
http://192.168.237.130:9200/people/man/1
{
	"name":"wei",
	"country":"china",
	"age":28,
	"data":"1293-12-33"
}

自动ID插入

Method:POST
http://192.168.237.130:9200/people/man/
{
	"name":"wei2",
	"country":"china",
	"age":23,
	"data":"1293-12-23"
}

修改文档

直接修改文档

Method:POST
http://192.168.237.130:9200/people/man/1/_update
{
	"doc":{
		"name":"who am I"
	}
}

通过脚本修改文档

{
	"script":{
		"lang":"painless",
		"inline": "ctx._source.age = params.age",
		"params": {
			"age":100
		}
	}
}

删除

删除文档

Method:DELETE
http://192.168.237.130:9200/people/man/1

删除索引

Method:DELETE
http://192.168.237.130:9200/people

删除数据

POST indexName/_delete_by_query
{
  "query": { 
    "match_all": {
    }
  }
}

查询

简单查询

Method:GET
http://192.168.237.130:9200/book/novel/1

条件查询

Method
http://192.168.237.130:9200/book/_search
查询全部
{
	"query":{
		"match_all":{}
	},
	"from":1,
	"size":1
}

from 表示从结果中的第几条开始取数据,size表示取多少条

根据条件查询
{
	"query":{
		"match":{
			"title":"ES"
		}
	},
	"sort":[
		{
		"publish_date":{"order":"desc"}}
	]
}
聚合查询
{
	"aggs":{
		"group_by_word_count":{
			"terms":{
				"field":"word_count"
			}
		},
		"group_by_publish_date":{
			"terms":{
				"field":"publish_date"
			}
		}
	}
}
子条件查询:Query Context

在查询过程中,除了判断文档是否满足查询条件,ES还会计算一个_score来标志匹配的程度,旨在判断目标文档和查询条件匹配有多好

  • 全文本查询:针对文本类型数据
    模糊匹配:

{
   "query":{
   	"match":{
   		"author":"李四"
   	}
   }
}

完全匹配

{
   "query":{
   	"match_phrase":{
   		"author":"李四"
   	}
   }
}

多个字段匹配查询

{
   "query":{
   	"multi_match":{
   		"query":"李四",
   		"fields":["author","title"]
   	}
   }
}

query_string 查询

{
   "query":{
   	"query_string":{
   		"query":"李四 AND ES"
   	}
   }
}
  • 字段级别查询:针对结构化数据,如数字,日期等
    字段查询
{
   "query":{
   	"term":{
   		"word_count":1000
   	}
   }
}

范围查询

{
   "query":{
   	"range":{
   		"word_count":{
   			"gte":1000,
   			"lte":2000
   		}
   	}
   }
}
子条件查询:Filter Context

在查询过程中,只判断该文件是否满足条件,只有Yes或者No

{
	"query":{
		"bool":{
			"filter":{
				"term":{
					"word_count":1000
				}
			}
		}
	}
}
符合条件查询
  • 固定分数查询
{
	"query":{
		"constant_score":{
			"filter":{
				"match":{
					"title":"ES"
				}
			},
			"boost":2
		}
	}
}
  • 布尔查询
    should是或逻辑,must是与逻辑

	"query":{
		"bool":{
			
				"should":[
					{
						"match":{
							"author":"李四"
						}
					},
					{
						"match":{
							"title":"ES"
						}
					}
					]
			
		}
	}
}

查询空值

ES2.x

{
	"query":{
		"missing":{
			"field":"value"
		}
	}
}

ES5.x以上
ES5.x以后就没有missing查询了,需要用以下查询代替

{
    "query": {
        "bool": {
            "must_not": {
                "exists": {
                    "field": "value"
                }
            }
        }
    }
}

手动段合并

POST /indexName/_optimize?max_num_segments=1

你可能感兴趣的:(elasticsearch)