ES与kibana学习笔记

本文档详细介绍了Elasticsearch中对索引的管理操作,包括创建、查看、删除索引,设置分片和副本数量,以及数据类型的使用。同时,讲解了如何映射字段类型,动态映射的三种模式,以及如何通过PUT和POST方法插入、更新文档。此外,还展示了如何使用_search接口检索文档,进行条件搜索,聚合分析,以及删除文档的方法。
摘要由CSDN通过智能技术生成

临近考试,浅浅记个笔记。

ES索引请求

  • PUT:创建索引
  • GET:查看索引
  • DELETE:删除索引
  • HEAD:检验索引存在性

创建索引

  • settings设置
    1、number_of_shards:每个索引的主分片数,默认值是5 。这个配置在索引创建后不能修改。
    2、number_of_replicas:每个主分片的副本数,默认值是1 。对于活动的索引库,这个配置可以随时修改。
PUT /product
{
	"settings": {
		"number_of_shards": 3,
		"number_of_replicas" : 1
	}
}
  • 索引数据类型
    1、字符串类型:
    ··string
    ··text
    ··keyword
    PS:从ElasticSearch 5.x开始不再支持string,由text和keyword类型替代。
    2、整数类型:
    ··long
    ··integer
    ··short
    ··byte
    3、浮点类型:
    ··double
    ··float
    ··half_float
    ··scaled_float
    4、逻辑类型:
    ··boolean
    5、日期类型:
    ··date
    6、范围类型:
    ··range
    7、二进制类型:
    ··binary
    8、复合类型数组类型:
    ··对象类型array
    ··JSON格式对象数据object
    ··嵌套类型nested
    ··地理类型地理坐标类型geo_point
    ··地理地图geo_shape
    ··特殊类型IP类型
    ··范围类型completion
    ··令牌计数类型token_count
    ··附件类型attachment
    ··抽取类型percolator
  • mapping映射
    1、动态映射,即不事先指定映射类型(Mapping)。
    2、dynamic 属性有三种取值:
    ①true,默认即此。自动添加新字段。
    ②false,忽略新字段。
    ③strict,严格模式,发现新字段会抛出异常。

创建索引例子

创建一个名为product的索引,索引分片数为3,副本数为1。映射字段为code(keyword类型),name(text类型),price(double类型),psDate(date类型),category(int类型),address(text类型)。

PUT /product
{
  "settings": {
      "number_of_shards":3,
      "number_of_replicas":1
  },
  "mappings":{
    "dynamic":"strict",
    "properties": {
      "code":{
        "type":"keyword"
      },
      "name":{
        "type":"text"
      },
      "price":{
        "type":"double"
      },
      "psDate":{
        "type":"date"
      },
      "category":{
        "type":"integer"
      },
      "address":{
        "type":"text"
      }
    }
  }
}

这里要注意逗号,该加的必须要加上去,不该加的一定不能加。
索引创建成功后可由下面代码查看索引信息:

GET /product/_settings

查看索引映射信息:

GET /product/_mappings

修改设置

  • 修改索引副本分片个数:
PUT product/_settings
{
	"settings":{
		"number_of_replicas":2
	}
}

索引字段可以添加;
索引字段一旦定义之后,是无法修改的;
索引字段一旦添加不可删除。

PUT product/_mapping
{
	"properties":{
		"message":{
			"type":"text"
		}
	}
}

索引数据的插入

通过PUT 或者POST 请求方法实现。这里使用PUT方法。

  • _index:索引
  • _type:类型(es7以后,一个索引只含有一个固定的type,即:_doc)
  • _id:id仅仅是一个字符串,它与_index和_type组合时,就可以在Elasticsearch中唯一标识一个文档。当创建一个文档,你可以自定义_id,也可以让Elasticsearch帮你自动生成。

语法格式:

PUT /{INDEX}/{TYPE}/{ID}
{
	"field":"value",
	.......
}

不写id的话,Elasticsearch会自动创建id。
文档索引的添加还可以通过PUT+_create参数创建,该方法创建的文档需指定id,如果id所在的文档已存在,则报错;否则,则添加成功。

PUT /{index}/_create/{ID}
{
	"field": "value"
}

接上述 创建索引例子 ,给product索引添加文档信息,如下:

PUT /product/_doc/1
{
  "code":1001,
  "name":"西瓜,鲜甜可口",
  "price":10,
  "psDate":"2022-05-31",
  "category":1,
  "address":"jiangsu wuxi"
}

小总结:

  • PUT命令:如果ID在文档中不存在,则新增该条记录,如果ID已存在,则覆盖原有内容,并通过version递增1标识。
  • POST命令:如果提供ID,效果同PUT命令;如果不提供ID,则自动提供一个GUID,并作为新记录存入ES。
  • 使用PUT+_create参数:指定本记录为新增记录,如果ID已经存在,则报错;如果ID不存在,则添加成功。

索引数据的更新

①使用PUT提交一个相同ID的记录即可:原有记录删除,版本号递增1,新内容作为原有ID的内容;所有字段数据相当于被删除,然后重新添加。
接上面的代码,修改想要修改的信息,再运行一下即可。(这里修改了price)

PUT /product/_doc/1
{
  "code":1001,
  "name":"西瓜,鲜甜可口",
  "price":5.5,
  "psDate":"2022-05-31",
  "category":1,
  "address":"jiangsu wuxi"
}

②通过POST命令+Update参数修改原有文档
当有数据发生变化时,版本号会变化,无修改内容,则无变化。
字段重复的内容直接覆盖,字段不重复则追加。

POST /product/_update/1
{
"doc":{
  "code":1001,
  "name":"西瓜,鲜甜可口",
  "price":5.5,
  "psDate":"2022-05-31",
  "category":1,
  "address":"jiangsu wuxi"
  }
}

③尽管使用PUT 和POST方法请求文档可以更新文档,但必须要知道文档的_id 字段值。
如果不知道文档ID,那么就要用到根据查询条件进行更新的_update_by_query 接口了。该接口使用POST方法请求,并通过query 参数接收查询条件。

PUT /product/_update_by_query
{
	"script":{
  		"code":1001,
  		"name":"西瓜,鲜甜可口",
  		"price":5.5,
  		"psDate":"2022-05-31",
  		"category":1,
  		"address":"jiangsu wuxi"
 	 },
	"query":{
		"term":{
			"code":1001
		}
	}

}

获取索引信息(检索文档)

  • 在index1和index2索引中搜索所有的文档
GET /index1,index2/_search
  • 在任何以g或者u开头的索引中搜索所有的类型
GET /g*,u*/_search
  • 通过_search获取某个索引中所有文档信息,包括索引信息;
GET /{index}/_search
  • 通过_id 值获取单个文档信息;
    HEAD 方法用于存在性校验,返回结果通过状态码200 和404 表示文档是否存在。
HEAD /my_index/_doc/{id}

GET 方法返回结果包含了文档的基本信息,代码如下:

GET /{index}/_doc/{id}
  • 通过_mget 接口根据多个_id 获取多个文档
    如果想要根据一组_id 值查看多个文档,可以使用_mget 接口实现。
    _mget 接口根据索引名称和文档ID 获取多个文档,可以使用GET 或POST 方法请求该接口。
    在请求地址中可以指定一个或者多个索引,也可以不包含索引。
    在这里插入图片描述
    _mget 接口可以使用_source 参数指定获取哪些字段,但不是在请求路径中使用,而是在docs 中与_index_id 等参数一起使用。

基于URI——分页

如果每页展示5 条结果,可以用下面方式请求得到1 到3 页的结果:

GET/_search?size=5
GET/_search?size=5&from=5
GET/_search?size=5&from=10

基于URI——条件搜索

查询文档中字段内容为20的文档数据:

GET /product/_search?q=20

查询文档中字段内容以02结尾的文档数据:

GET /product/_search?q=*02

指定某个或某些字段查询:
查询文档中字段age=28的文档数据:

GET /customer/_search?q=age:28

查询sex=1的数据并按照age升序排序:

GET /_search?q=sex:1&sort=age:asc

其他

查询商品编号code为2001的商品信息。

GET product/_search
{
  "query": {
    "term": {
      "code": "2001"
    }
  }
}

查询价格取值范围再50-100之间的商品信息。

GET product/_search
{
  "query": {
    "range": {
      "price": {
        "gte": 50,
        "lte": 100
      }
    }
  }
}

查询产地address属于beijing或者zhejiang的商品信息。

GET product/_search
{
  "query": {
    "bool": {
      "should": [
        {"match": {
          "address": "beijing"
        }},
        {"match": {
            "address": "zhejiang"
          }
        }
      ]
    }
  }
}

查询商品价格在50-100之间,且category包含2和3的商品信息。

GET product/_search
{
  "query": {
    "bool": {
      "must": [
        {"range": {
          "price": {
            "gte": 50,
            "lte": 100
          }
        }},
        {
          "terms": {
            "category": [
              "2",
              "3"
            ]
          }
        }
      ]
    }
  }
}

按种类category统计商品产地为jiangsu或者zhejiang的商品价格的平均值,最大值,最小值。

GET product/_search
{
  "size":0,
  "query": {
      "bool": {
        "should": [
          {"match": {
            "address": "beijing"
         }},
          {"match": {
            "address": "zhejiang"
            }
          }
        ]
      }
  },
  "aggs": {
    "aggs_category": {
      "terms": {
        "field": "category"
      },
      "aggs": {
        "avg_price": {
          "avg": {
            "field": "price"
          }
        },
        "max_price":{
          "max": {
            "field": "price"
          }
        },
        "min_price":{
          "min": {
            "field": "price"
          }
        }
      }
    }
  }
}

统计每月进货商品的总价格和个数。并按照日期从小到大排序。

GET product/_search
{
  "size": 0,
  "aggs": {
    "aggs_date": {
      "date_histogram": {
        "field": "psDate",
        "calendar_interval": "month",
         "format": "yyyy-MM",
        "order": {
          "_key": "desc"
        }
      },
      "aggs": {
        "sum_price": {
          "sum": {
            "field": "price"
          }
        },
        "count_date":{
          "value_count": {
            "field": "psDate"
          }
        }
      }
    }
  }
}

索引的删除

DELETE product
DELETE product/_doc/4

根据查询条件找到满足条件的文档并删除。

POST /product/_delete_by_query
{
	"query":{
		"term":{
			"productCode":"1002"
		}
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值