网上得来终觉浅

_φ(❐_❐✧ 人丑就要多读书

导航

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
}  

posted on 2022-05-25 17:36  bgtong  阅读(110)  评论(0编辑  收藏  举报