1、什么是Elasticsearch
能够安全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、分析和可视化。Elaticsearch,简称为ES, ES是一个开源的高扩展的分布式全文搜索引擎,是整个Elastic Stack技术栈的核心。它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。
2、数据格式
Elasticsearch是面向文档型数据库,一条数据在这里就是一个文档。 为了方便大家理解,我们将 Elastic s earch 里 存储 文档 数据和关系型数据库 MySQL 存储数据的概念进行一个类比
索引(Index)
ES将数据存储于一个或多个索引中,索引是具有类似特性的文档的集合。类比传统的关系型数据库领域来说,索引相当于SQL中的一个数据库,或者一个数据存储方案(schema)。索引由其名称(必须为全小写字符)进行标识,并通过引用此名称完成文档的创建、搜索、更新及删除操作。一个ES集群中可以按需创建任意数目的索引。
类型(Type)
类型是索引内部的逻辑分区(category/partition),然而其意义完全取决于用户需求。因此,一个索引内部可定义一个或多个类型(type)。一般来说,类型就是为那些拥有相同的域的文档做的预定义。例如,在索引中,可以定义一个用于存储用户数据的类型,一个存储日志数据的类型,以及一个存储评论数据的类型。类比传统的关系型数据库领域来说,类型相当于“表”。
文档(Document)
文档是Lucene索引和搜索的原子单位,它是包含了一个或多个域的容器,基于JSON格式进行表示。文档由一个或多个域(Field)组成,每个域拥有一个名字及一个或多个值,有多个值的域通常称为“多值域”。每个文档可以存储不同的域集,但同一类型下的文档至应该有某种程度上的相似之处。
域(field)
文档由多个域组成,不同的文档里面同名的域一定具有相同的数据类型。文档里面域可以重复出现,也就是一个field会有多个值,即multivalued。
映射(Mapping)
存储域field的相关映射信息,不同type会有不同的mapping。
ES中,所有的文档在存储之前都要首先进行分析。用户可根据需要定义如何将文本分割成语汇单元(token)、哪些token应该被过滤掉,以及哪些文本需要进行额外处理等等。另外,ES还提供了额外功能,例如将域中的内容按需排序。事实上,ES也能自动根据其值确定域的类型。
大致可以认为Index就是一个db,document type就是一个table,document就是一行数据,field就是table的column,mapping就是table的定义。
3、基本概念
4、Elasticsearch特点
- 分布式文件存储
- 实时分析的分布式搜索引擎。
- 高可拓展性。
- 可插拔的插件支持。
5、Elasticsearch功能
- 数据搜集
- 数据分析
- 数据存储
6、操作ES
1.创建索引
POST /索引名称/类型名称
{
"mapping":{
"properties":{
"列名":{
"type":"数据类型"
},
"列名":{
"type":"数据类型"
}
}
}
}
-------支持的数据类型
text:文本类型
integer float,都变了,long....数字类型
date:日期类型
6.1新建索引
PUT /lfkj123
{
"mappings":{
"properties":{
"name":{
"type":"text"
},
"age":{
"type":"integer"
}
}
}
}
---------------------------------新建索引成功---------------------------------
{
"acknowledged" : true,
"shards_acknowledged" : true,
"index" : "lfkj123"
}
6.2删除索引
DELETE /aaa
-----------------------------
{
"acknowledged" : true
}
6.3查看ES中所有索引
GET /_cat/indices?v
**********************************
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open .apm-custom-link 1icaoHiJRU6b1Fe2II8lpg 1 0 0 0 208b 208b
yellow open ddd D0H7Dn0dS8iupk_XcDT1Lw 1 1 1 0 8.1kb 8.1kb
green open .kibana-event-log-7.13.4-000001 i-0FgnYISWSI8O8IWWiYxw 1 0 17 0 45.5kb 45.5kb
green open .apm-agent-configuration LW6vt4WPRYW_fLVNRYNDng 1 0 0 0 208b 208b
green open .kibana_7.13.4_001 GE-5sU0ORwmip9zG1AJCfw 1 0 54 12 2.1mb 2.1mb
yellow open lfkj123 RzoK-kFNQqq2a87LvbE6kQ 1 1 0 0 208b 208b
green open .kibana_task_manager_7.13.4_001 OB6dqsdIQ6uUn67_MeX4TQ 1 0 10 1247 340.1kb 340.1kb
yellow open lfkjoa_es klDWhWy4Qu27wS-xPxh4Mg 1 1 205 0 171.7kb 171.7kb
green open .tasks SPU6znxaQZKINkN-BydH2Q 1 0 30 0 56kb 56kb
6.4查看索引结构
GET /lfkj123
------------------------------------------
{
"lfkj123" : {
"aliases" : { },
"mappings" : {
"properties" : {
"age" : {
"type" : "integer"
},
"name" : {
"type" : "text"
}
}
},
"settings" : {
"index" : {
"routing" : {
"allocation" : {
"include" : {
"_tier_preference" : "data_content"
}
}
},
"number_of_shards" : "1",
"provided_name" : "lfkj123",
"creation_date" : "1685586982631",
"number_of_replicas" : "1",
"uuid" : "RzoK-kFNQqq2a87LvbE6kQ",
"version" : {
"created" : "7130499"
}
}
}
}
}
6.5添加文档---记录
1.如果添加时指定了id值
PUT /lfkj123/_doc/1
{
"name":"刘德华",
"age":18
}
-------结果-------------------
{
"_index" : "lfkj123",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
2.添加时不指定id的值
POST /lfkj123/_doc
{
"name":"成龙",
"age":21
}
-----------------结果--------------
{
"_index" : "lfkj123",
"_type" : "_doc",
"_id" : "D3fudIgBlSOp2xX04qqX",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 1,
"_primary_term" : 1
}
6.6查询文档---跟进id查询
GET /lfkj123/_doc/1
--------------结果---------
{
"_index" : "lfkj123",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"_seq_no" : 0,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "刘德华",
"age" : 18
}
}
6.7删除文档
DELETE /lfkj123/_doc/1
-------------------------------------
{
"_index" : "lfkj123",
"_type" : "_doc",
"_id" : "1",
"_version" : 2,
"result" : "deleted",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 2,
"_primary_term" : 1
}
6.8修改文档
第一种修改 指明索引列 如果不指定某些列,则这些列会在索引中丢失
PUT /lfkj123/_doc/1
{
"name":"哇哇哇哇",
"age":28
}
PUT /lfkj123/_doc/1
{
"name":"哇哇哇哇"
}
-------------------------------------
{
"_index" : "lfkj123",
"_type" : "_doc",
"_id" : "1",
"_version" : 3,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 5,
"_primary_term" : 1
}
第二种 修改部分列
POST /lfkj123/_doc/3/_update
{
"doc":{
"age":55
}
}
6.8文档查询
GET /lfkj123/_doc/_search?q=name:刘&q=age:55
--------------------------------------------------
#! [types removal] Specifying types in search requests is deprecated.
{
"took" : 109,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 0.8480702,
"hits" : [
{
"_index" : "lfkj123",
"_type" : "_doc",
"_id" : "3",
"_score" : 0.8480702,
"_source" : {
"name" : "刘备",
"age" : 55
}
}
]
}
}
6.9查询时传递json参数
#按名字查match(匹配)
GET /lfkj123/_doc/_search
{
"query":{
"match":{
"name":"刘"
}
}
}
#按年龄查询range(范围)
GET /lfkj123/_doc/_search
{
"query":{
"range":{
"age":{
"gt":10,
"lt":30
}
}
}
}
-----------------------------------------------
6.10查询部分列
GET /lfkj123/_doc/_search
{
"query":{
"range":{
"age":{
"gt":10,
"lt":30
}
}
},
"_source":["name"]
}
6.11查询时按照某个字段排序
GET /lfkj123/_doc/_search
{
"query":{
"range":{
"age":{
"gt":10,
"lt":30
}
}
},
"_source":["name"],
"sort":{
"age":{
"order":"asc"
}
}
}
6.12查询分页
GET /lfkj123/_doc/_search
{
"query":{
"range":{
"age":{
"gt":10,
"lt":60
}
}
},
"_source":["name"],
"sort":{
"age":{
"order":"asc"
}
},
"from":1,
"size":1
}