es
快速检查集群的健康状况
GET /_cat/health?v
green:每个索引的primary shard和replica shard都是active状态的
yellow:每个索引的primary shard都是active状态的,但是部分replica shard不是active状态,处于不可用的状态
red:不是所有索引的primary shard都是active状态的,部分索引有数据丢失了
索引
直接put数据 PUT index/_doc/1,es会自动生成索引,并建立动态映射dynamic mapping。在生产上,我们需要自己手动建立索引和映射,为了更好地管理索引。就像数据库的建表语句一样。
快速查看集群中有哪些索引
GET /_cat/indices?v
创建索引:
PUT /demo_index?pretty
#详细语法
PUT /index
{
"settings": { ... any settings ... },
"mappings": {
"properties" : {
"field1" : { "type" : "text" }
}
},
#索引别名
"aliases": {
"default_index": {}
}
}
查询索引
GET /my_index/_mapping
GET /my_index/_setting
修改索引
PUT /my_index/_settings
{
"index" : {
#修改副本数
"number_of_replicas" : 2
}
}
删除索引:
DELETE /demo_index?pretty
#删除指定索引
DELETE /my_index
#删除多个索引
DELETE /index_one,index_two
#删除多个索引
DELETE /index_*
#删除全部索引
DELETE /_all
为了安全起见,防止恶意删除索引,删除时必须指定索引名:
elasticsearch.yml
action.destructive_requires_name: true
新增文档
语法 PUT /index/type/id
PUT /book/_doc/1
{
"name": "Bootstrap开发",
"description": "Bootstrap是由Twitter推出的一个前台页面开发css框架,是一个非常流行的开发框架,此框架集成了多种页面效果。此开发框架包含了大量的CSS、JS程序代码,可以帮助开发者(尤其是不擅长css页面开发的程序人员)轻松的实现一个css,不受浏览器限制的精美界面css效果。",
"studymodel": "201002",
"price":38.6,
"timestamp":"2019-08-25 19:11:35",
"pic":"group1/M00/00/00/wKhlQFs6RCeAY0pHAAJx5ZjNDEM428.jpg",
"tags": [ "bootstrap", "dev"]
}
新增文档自动生成ID:
长度为20个字符,URL安全,base64编码,GUID,分布式生成不冲突
# 语法:POST /index/_doc
POST /test_index/_doc
{
"test_field": "test1"
}
强制新增文档
为防止覆盖原有数据,我们在新增时,设置为强制创建,不会覆盖原有文档。如果原文档存在则返回失败
#语法 PUT /index/ _doc/id/_create
PUT /test_index/_doc/1/_create
{
"test_field": "test"
}
修改覆盖文档
语法 PUT /index/type/id
:替换操作是整体覆盖,要带上所有信息。
实质:旧文档的内容不会立即删除,只是标记为deleted。适当的时机,集群会将这些文档删除。
PUT /book/_doc/1
{
"name": "Bootstrap开发教程1",
"description": "Bootstrap是由Twitter推出的一个前台页面开发css框架",
"studymodel": "201002",
"price":38.6,
"timestamp":"2019-08-25 19:11:35",
"pic":"group1/M00/00/00/wKhlQFs6RCeAY0pHAAJx5ZjNDEM428.jpg",
"tags": [ "bootstrap", "开发"]
}
修改更新文档
只修改变动字段
#语法 POST /{index}/type/{id}/_update 或者 POST /{index}/_update/{id}
POST /book/_update/1/
{
"doc": {
"name": " Bootstrap开发教程高级"
}
}
检索文档
语法:GET /index/type/id
GET /book/_doc/1
检索文档指定字段
GET /book/_doc/1?__source_includes=name,price
mget 批量查询:
GET /_mget
{
"docs" : [
{
"_index" : "test_index",
"_id" : 2
},
{
"_index" : "test_index",
"_id" : 3
}
]
}
#同一索引下批量查询:
GET /test_index/_mget
{
"docs" : [
{
"_id" : 2
},
{
"_id" : 3
}
]
}
搜索写法
post /test_index/_doc/_search
{
"query": {
"ids" : {
"values" : ["1", "7"]
}
}
}
GET /indexname/_search?q=2019 #0条结果
GET /indexname/_search?q=2019-01-01 #1条结果
GET /indexname/_search?q=fieldname:2019-01-01 #1条结果
GET /indexname/_search?q=fieldname:2019 #0 条结果
批量增删改 bulk
#语法
POST /_bulk
{"action": {"metadata"}}
{"data"}
如下操作,删除5,新增14,修改2。
POST /_bulk
{ "delete": { "_index": "test_index", "_id": "5" }}
{ "create": { "_index": "test_index", "_id": "14" }}
{ "test_field": "test14" }
{ "update": { "_index": "test_index", "_id": "2"} }
{ "doc" : {"test_field" : "bulk test"} }
映射
查询索引映射
GET /indexname/_mapping/
查询所有索引的映射
GET /_mapping
创建映射
创建索引后,应该立即手动创建映射
PUT book/_mapping
{
"properties": {
"name": {
"type": "text"
},
"description": {
"type": "text",
#指定索引分词器
"analyzer":"english",
#定义搜索时使用的分词器
"search_analyzer":"english"
},
"pic":{
"type":"text",
#指定是否索引,默认为index=true,即要进行索引,只有进行索引才可以从索引库搜索到。
#但是也有一些内容不需要索引,比如:商品图片地址只被用来展示图片,不进行搜索图片,此时可以将index设置为false。
"index":false
},
"studymodel":{
"type":"text"
}
}
}
keyword关键字字段
目前已经取代了"index": false。上边介绍的text文本字段在映射时要设置分词器,keyword字段为关键字字段,通常搜索keyword是按照整体搜索,所以创建keyword字段的索引时是不进行分词的,比如:邮政编码、手机号码、身份证等。keyword字段通常用于过虑、排序、聚合等。
修改映射
只能创建index时手动建立mapping,或者新增field mapping,但是不能update field mapping。
因为已有数据按照映射早已分词存储好。如果修改,那这些存量数据怎么办。
删除映射
通过删除索引来删除映射。
模板
创建模板
PUT _template/hhlink_consumer_template
{
"order": 0,
"index_patterns": [
#指定索引匹配规则
"hhlink-consumer-log*"
],
"settings" : {
"index" : {
"mapping" : {
#设置单个索引最大字段数2000
"total_fields" : {
"limit" : "2000"
}
},
#分片数
"number_of_shards" : "3",
#副本数
"number_of_replicas" : "0"
}
},
#映射
"mappings" : {
"fluentd-aggregator" : {
"properties" : {
"@timestamp" : {
"type" : "date"
},
"AnalyzedData" : {
"properties" : {
"addr" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
}
},
"errMsg" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
}
}
}
}
查看模板
GET /_template/模板名称
GET /_template/模板名称一部分*
GET /_template/模板名称1,模板名称2
#查看全部模板
GET /_template
删除模板
DELETE /_template/模板名称
判断模板是否存在
HEAD /_template/模板名称
kibana
Kibana---Management--- Create index pattern--- Index pattern填索引名,下一步,再点击discover就可看到数据。
bug
es入库失败,报错Limit of total fields [1000] in index [issue] has been exceeded
es默认索引字段数限制为1000,超出则入库失败,可手动修改限制:
PUT my_index/_settings
{
"index.mapping.total_fields.limit": 2000
}
本文来自博客园,作者:bgtong,转载请注明原文链接:https://www.cnblogs.com/bgtong/p/16310108.html