需要先安装ElasticSearch、Kibana以及IK分词器。本文使用的ES是v7.3.2版本。
安装好之后,启动ElasticSearch(默认9200端口),
启动Kibana(默认5601端口)
1.索引的操作
1.1 创建一个索引
# 创建一个索引
PUT /person
{
"settings": {
"number_of_shards": 5,
"number_of_replicas": 1
}
}
1.2 查看索引信息
(1)使用Kibana中的management界面查看索引信息
(2)使用restful命令查看
# 查看索引信息
GET /person
查询的结果为:
{
"person" : {
"aliases" : { },
"mappings" : { },
"settings" : {
"index" : {
"number_of_shards" : "5",
"blocks" : {
"read_only_allow_delete" : "true"
},
"provided_name" : "person",
"creation_date" : "1608118330592",
"number_of_replicas" : "1",
"uuid" : "CPim2GG-S221jLc6f67nJw",
"version" : {
"created" : "7030299"
}
}
}
}
}
1.3 删除索引
(1)使用Kibana中的management界面删除索引信息
(2)使用restful命令删除索引
# 删除索引
DELETE /person
2 ES中Field可以指定的类型
字符串类型:
text:一般被用于全文检索。将当前Field进行粉刺。
keyword:当前Field不会被分词。
数值类型:
long:长整型
integer:整型
short:短整型
byte:字节
double:双精度浮点
float:单精度浮点。
half_float:精度比float小一半。
scaled_float:根据一个long和scaled来表达一个浮点型数值。
时间类型:
date类型,针对时间类型指定具体的格式
布尔类型:
boolean类型,表达true或false
二进制类型:
binary类型暂时支持Base64编码的字符串
范围类型:
integer-range:赋值时,无需指定具体数值,只需指定一个范围即可。
long-range:赋值时,无需指定具体数值,只需指定一个范围即可。
float-range:赋值时,无需指定具体数值,只需指定一个范围即可。
double-range:赋值时,无需指定具体数值,只需指定一个范围即可。
date-range:
ip-range:
经纬度数据类型:
geo-point:存储经纬度。
ip类型:
ip:可存储IPV4或IPV6的格式。
3.创建索引并指定数据结构
# 创建索引并指定数据结构
PUT /book
{
"settings": {
"number_of_shards": 5, #分片数
"number_of_replicas": 1 #备份数
},
"mappings": { #指定数据结构
"properties":{ #各个Field
"name":{ # Field属性名
"type":"text", #类型
"analyzer":"ik_max_word", #分词器
"index":true, #指定当前Field可以被作为查询条件
"store":false #是否需要额外存储
},
"author":{
"type":"keyword"
},
"count":{
"type":"long"
},
"onsale":{
"type":"date",
"format":"yyyy-MM-dd hh:mm:ss||yyyy-MM-dd||epoch_millis" # 指定时间类型的格式化方式
},
"descr":{
"type":"text",
"analyzer":"ik_max_word"
}
}
}
}
创建的结果:
{
"acknowledged" : true,
"shards_acknowledged" : true,
"index" : "book"
}
4.文档的操作
文档在ES服务中的唯一标识:_index,_type,_id三个内容为组合,确定一个文档及其操作是添加还是修改
4.1 新建文档
(1)自动生成_id
# 添加文档,自动生成id
POST /book/_doc
{
"name":"机器学习",
"author":"周志华",
"count":100000,
"on-sale":"2016-01-01",
"descr":"机器学习宝典"
}
生成的id为:SBHOZncBtz0RL73LqSeF
{
"_index" : "book",
"_type" : "_doc",
"_id" : "SBHOZncBtz0RL73LqSeF",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
(2)添加文档,手动指定id
# 添加文档,手动指定id
PUT /book/_doc/1
{
"name":"深度学习",
"author":"伊恩·古德费洛",
"count":200000,
"on-sale":"2017-07-01",
"descr":"深度学习宝典"
}
生成的id为:1
{
"_index" : "book",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
4.2 修改文档
(1)覆盖式修改
PUT /book/_doc/1
{
"name":"深度学习",
"author":"伊恩·古德费洛",
"count":250000,
"on-sale":"2017-07-01",
"descr":"深度学习宝典"
}
执行结果为:
{
"_index" : "book",
"_type" : "_doc",
"_id" : "1",
"_version" : 2,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 1,
"_primary_term" : 1
}
(2)doc修改方式
# 修改文档
POST /book/_update/1
{
"doc":{
"count":250020
}
}
修改结果为:
{
"_index" : "book",
"_type" : "_doc",
"_id" : "1",
"_version" : 3,
"result" : "noop",
"_shards" : {
"total" : 0,
"successful" : 0,
"failed" : 0
}
}
4.3 删除文档
# 删除索引
DELETE /book/_doc/1
删除结果为:
{
"_index" : "book",
"_type" : "_doc",
"_id" : "1",
"_version" : 4,
"result" : "deleted",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 3,
"_primary_term" : 1
}