索引库就类似数据库表,mapping 映射就类似表的结构。
我们要向 es 中存储数据,必须先创建“库”和“表”。
mapping 是对索引库中文档的约束,常见的 mapping 属性包括:
例如下面的 json 文档:
{
"age": 21,
"weight": 52.1,
"isMarried": false,
"info": "小帽课堂学习Java",
"email": "[email protected]",
"score": [99.1, 99.5, 98.9],
"name": {
"firstName": "云",
"lastName": "赵"
}
}
对应的每个字段映射(mapping):
PUT /索引库名称
{
"mappings": {
"properties": {
"字段名":{
"type": "text",
"analyzer": "ik_smart"
},
"字段名2":{
"type": "keyword",
"index": "false"
},
"字段名3":{
"properties": {
"子字段": {
"type": "keyword"
}
}
},
// ...略
}
}
}
PUT /alex
{
"mappings": {
"properties": {
"info":{
"type": "text",
"analyzer": "ik_smart"
},
"email":{
"type": "keyword",
"index": "false"
},
"name":{
"properties": {
"firstName": {
"type": "keyword"
}
}
},
// ... 略
}
}
}
请求方式:GET
请求路径:/索引库名
请求参数:无
GET /索引库名
倒排索引结构虽然不复杂,但是一旦数据结构改变(比如改变了分词器),就需要重新创建倒排索引,这简直是灾难。因此索引库一旦创建,无法修改 mapping。
虽然无法修改 mapping 中已有的字段,但是却允许添加新的字段到 mapping 中,因为不会对倒排索引产生影响。
PUT /索引库名/_mapping
{
"properties": {
"新字段名":{
"type": "integer"
}
}
}
请求方式:DELETE
请求路径:/索引库名
请求参数:无
DELETE /索引库名
索引库操作有哪些?
POST /索引库名/_doc/文档id
{
"字段1": "值1",
"字段2": "值2",
"字段3": {
"子属性1": "值3",
"子属性2": "值4"
},
// ...
}
POST /alex/_doc/1
{
"info": "小帽课堂学习Java",
"email": "[email protected]",
"name": {
"firstName": "云",
"lastName": "赵"
}
}
GET /{索引库名称}/_doc/{id}
GET /alex/_doc/1
DELETE /{索引库名}/_doc/id值
# 根据id删除数据
DELETE /alex/_doc/1
修改有两种方式:
全量修改是覆盖原来的文档,其本质是:
注意:如果根据 id 删除时,id 不存在,第二步的新增也会执行,也就从修改变成了新增操作了。
PUT /{索引库名}/_doc/文档id
{
"字段1": "值1",
"字段2": "值2",
// ... 略
}
PUT /alex/_doc/1
{
"info": "小帽课堂学习高级Java",
"email": "[email protected]",
"name": {
"firstName": "云",
"lastName": "赵"
}
}
POST /{索引库名}/_update/文档id
{
"doc": {
"字段名": "新的值",
}
}
POST /alex/_update/1
{
"doc": {
"email": "[email protected]"
}
}
文档操作有哪些?