目录
索引库
创建索引库
查看索引库
删除索引库
类型及映射
创建映射字段
属性说明
type
index
store
查看映射关系
文档
新增文档
查看文档
修改文档
删除文档
PUT /shop
{
"settings": {
"属性名": "属性值"
}
}
GET /shop
DELETE /shop
有了索引库
,等于有了数据库中的database
。接下来就需要索引库中的类型
了,也就是数据库中的表
。创建数据库表需要设置字段约束,索引库也一样,在创建索引库的类型时,需要知道这个类型下有哪些字段,每个字段有哪些约束信息,这就叫做字段映射(mapping)
。
字段的约束包括但不限于:
语法格式:
PUT /索引库名/_mapping/类型名称
{
"properties": {
"字段名": {
"type": "类型",
"index": true,
"store": true,
"analyzer": "分词器"
}
}
}
type为字段的数据类型,下面列出了几种最为常见的类型。
String类型,又分两种:
Numerical:数值类型,分两类:
基本数据类型:long、interger、short、byte、double、float、half_float;
浮点数的高精度类型:scaled_float。
Date:日期类型
elasticsearch可以对日期格式化为字符串存储,但是建议我们存储为毫秒值,存储为long,节省空间。
Array:数组类型
Object:对象
{
id: 123,
price: 25.5,
goods:{
name: "apple",
amount: 5
}
}
如果存储到索引库的是对象类型,例如上面的goods,会把goods编程两个字段:goods.name和goods.amount
index影响字段的索引情况。
index的默认值就是true,也就是说你不进行任何配置,所有字段都会被索引。但是有些字段是我们不希望被索引的,比如商品的图片信息,就需要手动设置index为false。
是否将数据进行独立存储。
原始的文本会存储在_source
里面,默认情况下其他提取出来的字段都不是独立存储的,是从_source
里面提取出来的。当然你也可以独立的存储某个字段,只要设置store:true即可,获取独立存储的字段要比从_source中解析快得多,但是也会占用更多的空间,所以要根据实际业务需求来设置,默认为false。
事例:
PUT /shop/_mapping/goods
{
"properties": {
"title": {
"type": "text",
"analyzer": "ik_max_word"
},
"subtitle": {
"type": "text",
"analyzer": "ik_max_word"
},
"images": {
"type": "keyword",
"index": "false"
},
"price": {
"type": "float"
}
}
}
GET /shop/_mapping/goods
响应结果:
如果文档没有唯一属性字段,可以通过POST方式新增,es会为文档生成唯一的uuid。
POST /shop/goods
{
"title":"香蕉",
"images":"http://image.xxx.com/123411.jpg",
"price":3.12
}
结果:
{
"_index" : "shop",
"_type" : "goods",
"_id" : "-yxENHQBsVejmPWpWQ2w",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
如果需要用自定义id进行新增文档,可以使用PUT方式:
POST /shop/goods/3
{
"title":"西瓜",
"images":"http://image.xxx.com/435252.jpg",
"price":15.60
}
结果:
{
"_index" : "shop",
"_type" : "goods",
"_id" : "3",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
根据id查看指定文档:
GET /shop/goods/-yxENHQBsVejmPWpWQ2w
结果:
{
"_index" : "shop",
"_type" : "goods",
"_id" : "-yxENHQBsVejmPWpWQ2w",
"_version" : 1,
"_seq_no" : 0,
"_primary_term" : 1,
"found" : true,
"_source" : {
"title" : "香蕉",
"images" : "http://image.xxx.com/123411.jpg",
"price" : 3.12
}
}
通过PUT方式,必须指定id,如果id存在则进行修改, 不存在则进行新增。
PUT /shop/goods/3
{
"title":"西瓜1",
"images":"http://image.xxx.com/435252.jpg",
"price":12.60
}
结果:
如果是新增,result结果为created,更新则为updated,每更新一次,version + 1。
{
"_index" : "shop",
"_type" : "goods",
"_id" : "3",
"_version" : 4,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 3,
"_primary_term" : 1
}
根据id进行删除:
DELETE /shop/goods/3
删除所有数据:
POST shop/_delete_by_query
{
"query": {
"match_all": {}
}
}