1. Docker安装ES
拉取es镜像
docker pull elasticsearch:8.5.3
创建网络
docker network create oj-network
启动es
docker run -d --name oj-es-dev -e "ES_JAVA_OPTS=-Xms256m -Xmx256m" -e "discovery.type=single-node" -v D:\javacode\oj-byte\deploy\dev\elasticSearch\es-plugins:/usr/share/elasticsearch/plugins -e "xpack.security.enabled=false" --privileged --network oj-network -p 9200:9200 -p 9300:9300 elasticsearch:8.5.3
D:\javacode\oj-byte\deploy\dev\elasticSearch\es-plugins(你想要挂载的目录地址)
访问9200端口,验证启动是否成功
2. 安装Kibana
Kibana是ElasticSearch的数据可视化和实时分析的工具。通过Kibana,用户可以搜索、查看和与存储在Elasticsearch索引中的数据进行交互,执行高级数据分析,并通过各种图表、表格和地图将数据可视化。
2.1. 拉取Kibana镜像
docker pull kibana:8.5.3
2.2. 启动kibana容器
docker run -d --name oj-kibana-dev -e "ELASTICSEARCH_HOSTS=http://oj-es-dev:9200" -e "I18N_LOCALE=zh-CN" -p15601:5601 --net=oj-network kibana:8.5.3
3. ES数据模型中的基本概念
ES数据模型中有一些基本概念,了解这些概念后可以更好的使用ES。
3.1. 索引(index)
Elasticsearch中存储数据的逻辑单位,类似于关系型数据库中的表。
(类型type,原本是在索引(lndex)内进行的逻辑细分,但后来发现企业研发为了增强可阅读性和可维护性制订的规范约束,同一个索引下很少还会再使用type进行逻辑拆分(如同一个索引下既有订单数据又有评论数据),因而在6.0.0版本之后,此定义废弃。所以index的级别也就下降到表了)。
一个集群里可以定义多个索引,如客户信息索引、商品分类索引、商品索引、订单索引、评论索引等等,分别定义自己的数据结构。索引命名要求全部使用小写,建立索引、搜索、更新、删除操作都需要用到索引名称。
3.2. 文档(document)
索引中的基本数据单元,类似于关系型数据库中的一行数据。
一个文档是一个可被索引的基础信息单元,Document(文档)是JSON格式的,Document 就像是MySQL中某个 Table 里面每一行的数据,Document中可以包含多个字段,每个字段可以是文本、数字、日期等类型
3.3. 字段(field)
文档的属性,类似于关系型数据库中的列。 每个字段有一个名称和值,可以是简单值(如字符串、数字)或复杂值(如数组、对象)。
3.4. 映射(mapping)
定义索引的结构,包括字段名、字段类型(如text
、keyword
、integer
)等。
Mapping是ES中的一个很重要的内容,它类似于传统关系型数据中table的schema(定义了数据库中的数据如何组织,包括表的结构、字段的数据类型、键的设置(如主键、外键)等),用于定义一个索引的数据的结构(mapping中主要包括字段名、字段数据类型和字段索引类型。)。在ES中,我们可以手动创建mapping,也可以采用默认创建方式。在默认配置下,ES可以根据插入的数据自动地创建mapping。
4. 感受基本的增删改查
进入开发者工具
在开发者工具中,我们可以在左侧编写相应的命令对es当中的数据进行操作,结果会呈现在右侧。
4.1. 增加数据
PUT /employee/_doc/1
{
"first_name" : "John",
"last_name" : "Smith",
"age" : 25,
"about" : "I love to go rock climbing",
"interests": [ "sports", "music" ]
}
PUT /employee/_doc/2
{
"first_name" : "Jane",
"last_name" : "Smith",
"age" : 32,
"about" : "I like to collect rock albums",
"interests": [ "music" ]
}
PUT /employee/_doc/3
{
"first_name" : "Douglas",
"last_name" : "Fir",
"age" : 35,
"about": "I like to build cabinets",
"interests": [ "forestry" ]
}
代码就是向employee索引(index)中添加文档(document),每个文档有自己的id标识。
4.2. 查询
4.2.1. 根据id查询
GET /employee/_doc/2
4.2.2. 查询所有数据
GET /employee/_search
4.3. 删除
4.3.1. 删除某个数据
DELETE /employee/_doc/1
4.3.2. 删除索引
DELETE /employee
4.4. 修改
POST /employee/_update/3
{
"doc" : {
"last_name" : "mark"
}
}