栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

8.4 SpringBoot集成ElasticSearch之修改文档

8.4 SpringBoot集成ElasticSearch之修改文档

1.mapper开发
在项目目录“/src/main/java/com/example/es”的EmployeeMapper类中新增修改员工信息接口,具体代码如下。

@EasyMapper(indices = "employee", clusterRouter = "sampleCluster")
public interface EmployeeMapper {
    
    @Update(docAsUpsert = true)
    UpdateResponse updateEmployee(EmployeeEntity employeeEntity);

    
    @Update
    GetResult updateEmployeeGetResult(EmployeeEntity employeeEntity);

    
    @Update
    RestStatus updateEmployeeRestStatus(EmployeeEntity employeeEntity);

    
    @Update
    Boolean updateEmployeeBoolean(EmployeeEntity employeeEntity);

    
    @Update
    boolean updateEmployeeBool(EmployeeEntity employeeEntity);

    
    @Update
    Result updateEmployeeResult(EmployeeEntity employeeEntity);

    
    @Update
    void updateEmployeeVoid(EmployeeEntity employeeEntity);

    
    @Update
    CompletableFuture updateEmployeeFuture(EmployeeEntity employeeEntity);

    
    @Update
    CompletableFuture updateEmployeeFutureVoid(EmployeeEntity employeeEntity);
}

2.controller开发
在项目目录“/src/main/java/com/example/es”下的EmployeeController类中新增修改员工信息接口,以updateEmployee接口为例演示开发步骤,具体代码如下。

@RestController
@RequestMapping("/updateEmployee")
public class EmployeeController {
    @Resource
    private EmployeeMapper employeeMapper;

    @ResponseBody
    @RequestMapping(value = "/updateEmployee", method = RequestMethod.POST)
    public UpdateResponse updateEmployee(@RequestBody EmployeeEntity employeeEntity) {
        return employeeMapper.updateEmployee(employeeEntity);
    }
}

3.测试
(1).文档不存在
启动项目,然后在postman中请求“http://localhost:8080/employee/updateEmployee”,返回请求执行结果。

{
    "id":"10000009",
    "employeeId":10000009,
	"name": "Damian Lillard",
	"job": "Vue engineer",
	"age": 25,
	"salary": 18000.00,
	"birthday": "1996-10-01"
}
{
    "shardInfo": {
        "total": 2,
        "successful": 1,
        "failures": [],
        "failed": 0,
        "fragment": false
    },
    "shardId": {
        "index": {
            "name": "employee",
            "uuid": "_na_",
            "fragment": false
        },
        "id": -1,
        "indexName": "employee",
        "fragment": true
    },
    "id": "10000009",
    "type": "_doc",
    "version": 1,
    "seqNo": 10,
    "primaryTerm": 1,
    "result": "CREATED",
    "getResult": null,
    "index": "employee",
    "fragment": false
}

(2).文档存在
启动项目,然后在postman中请求“http://localhost:8080/employee/updateEmployee”,返回请求执行结果。注意,这里虽然只修改了salary字段,其它字段也得带上,否则在修改时会被置为null。

{
    "id":"10000009",
    "employeeId":10000009,
	"name": "Damian Lillard",
	"job": "Vue engineer",
	"age": 25,
	"salary": 28000.00,
	"birthday": "1996-10-01"
}
{
    "shardInfo": {
        "total": 2,
        "successful": 1,
        "failures": [],
        "failed": 0,
        "fragment": false
    },
    "shardId": {
        "index": {
            "name": "employee",
            "uuid": "_na_",
            "fragment": false
        },
        "id": -1,
        "indexName": "employee",
        "fragment": true
    },
    "id": "10000009",
    "type": "_doc",
    "version": 2,
    "seqNo": 11,
    "primaryTerm": 1,
    "result": "UPDATED",
    "getResult": null,
    "index": "employee",
    "fragment": false
}

4.@Update属性说明

序号属性名默认值说明
1docAsUpsertfalse设置true,当文档不存在时,做插入操作
2retryOnConflict0设置版本冲突时,重试的次数
3refreshPolicyRefreshPolicy.NONE默认不刷新
4waitForActiveShards-2活动分片数量,-2时不指定分片数量,-1或all指定全部分片
5scriptedUpsertfalse运行脚本,无论文档是否存在

5.批量修改
(1).mapper开发
在项目目录“/src/main/java/com/example/es”的EmployeeMapper类中新增批量修改员工信息接口,具体代码如下。

@EasyMapper(indices = "employee", clusterRouter = "sampleCluster")
public interface EmployeeMapper {
	
    @Bulk(bulkType = BulkType.UPDATE, update = @Update(docAsUpsert = true))
    List bulkUpdateEmployeeList(List employeeEntityList);
}

(2).controller开发
在项目目录“/src/main/java/com/example/es”下的EmployeeController类中新增批量修改员工信息接口,以接口bulkUpdateEmployeeList为例演示开发步骤,具体代码如下。

@RestController
@RequestMapping("/employee")
public class EmployeeController {
    @Resource
    private EmployeeMapper employeeMapper;

    @ResponseBody
    @RequestMapping(value = "/bulkUpdateEmployeeList", method = RequestMethod.POST)
    public List bulkUpdateEmployeeList(@RequestBody List employeeConditionList) {
        return employeeMapper.bulkUpdateEmployeeList(employeeConditionList);
    }
}

(3).测试
启动项目,然后在postman中请求“http://localhost:8080/employee/bulkUpdateEmployeeList”,成功后返回对应的信息。

[
  {
    "id": "10000011",
    "employeeId": 10000011,
    "name": "Stephen Curry",
    "job": "Java engineer",
    "age": 27,
    "salary": 30000.00,
    "birthday": "1995-08-06"
  },
  {
    "id": "10000012",
    "employeeId": 10000012,
    "name": "Stephen Curry",
    "job": "Java engineer",
    "age": 27,
    "salary": 20000.00,
    "birthday": "1995-08-06"
  }
]
[
    {
        "id": "10000011",
        "opType": "UPDATE",
        "response": {
            "shardInfo": {
                "total": 2,
                "successful": 1,
                "failures": [],
                "failed": 0,
                "fragment": false
            },
            "shardId": {
                "index": {
                    "name": "employee",
                    "uuid": "_na_",
                    "fragment": false
                },
                "id": -1,
                "indexName": "employee",
                "fragment": true
            },
            "id": "10000011",
            "type": "_doc",
            "version": 2,
            "seqNo": 7,
            "primaryTerm": 1,
            "result": "UPDATED",
            "getResult": null,
            "index": "employee",
            "fragment": false
        },
        "failure": null,
        "type": "_doc",
        "index": "employee",
        "version": 2,
        "failureMessage": null,
        "itemId": 0,
        "failed": false,
        "fragment": false
    },
    {
        "id": "10000012",
        "opType": "UPDATE",
        "response": {
            "shardInfo": {
                "total": 2,
                "successful": 1,
                "failures": [],
                "failed": 0,
                "fragment": false
            },
            "shardId": {
                "index": {
                    "name": "employee",
                    "uuid": "_na_",
                    "fragment": false
                },
                "id": -1,
                "indexName": "employee",
                "fragment": true
            },
            "id": "10000012",
            "type": "_doc",
            "version": 3,
            "seqNo": 8,
            "primaryTerm": 1,
            "result": "CREATED",
            "getResult": null,
            "index": "employee",
            "fragment": false
        },
        "failure": null,
        "type": "_doc",
        "index": "employee",
        "version": 3,
        "failureMessage": null,
        "itemId": 1,
        "failed": false,
        "fragment": false
    }
]

6.条件修改
(1).mapper开发
在项目目录“/src/main/java/com/example/es”的EmployeeMapper类中新增条件修改员工接口,具体代码如下。

@EasyMapper(indices = "employee", clusterRouter = "sampleCluster")
public interface EmployeeMapper {
	
    @UpdateByQuery
    BulkByScrollResponse updateByQueryEmployee(EmployeeCondition employeeCondition);

    
    @UpdateByQuery
    CompletableFuture updateByQueryEmployeeFuture(EmployeeCondition employeeCondition);
}

(2).controller开发
在项目目录“/src/main/java/com/example/es”下的EmployeeController类中新增条件修改员工接口,以接口为例演示开发步骤,具体代码如下。

@RestController
@RequestMapping("/employee")
public class EmployeeController {
    @Resource
    private EmployeeMapper employeeMapper;

    @ResponseBody
    @RequestMapping(value = "/updateByQueryEmployee", method = RequestMethod.POST)
    public BulkByScrollResponse updateByQueryEmployee(@RequestBody EmployeeCondition employeeCondition) {
        return employeeMapper.updateByQueryEmployee(employeeCondition);
    }
}

(3).测试
启动项目,然后在postman中请求“http://localhost:8080/employee/updateByQueryEmployee”,成功后返回对应的信息。

{
	"employeeId":10000010
}
{
    "took": {
        "hours": 0,
        "minutes": 0,
        "seconds": 0,
        "stringRep": "24ms",
        "millis": 24,
        "micros": 24000,
        "microsFrac": 24000.0,
        "millisFrac": 24.0,
        "secondsFrac": 0.024,
        "hoursFrac": 6.666666666666667E-6,
        "minutesFrac": 4.0E-4,
        "daysFrac": 2.7777777777777776E-7,
        "nanos": 24000000,
        "days": 0
    },
    "status": {
        "total": 1,
        "updated": 1,
        "created": 0,
        "deleted": 0,
        "batches": 1,
        "versionConflicts": 0,
        "noops": 0,
        "bulkRetries": 0,
        "searchRetries": 0,
        "throttled": {
            "hours": 0,
            "minutes": 0,
            "seconds": 0,
            "stringRep": "0ms",
            "millis": 0,
            "micros": 0,
            "microsFrac": 0.0,
            "millisFrac": 0.0,
            "secondsFrac": 0.0,
            "hoursFrac": 0.0,
            "minutesFrac": 0.0,
            "daysFrac": 0.0,
            "nanos": 0,
            "days": 0
        },
        "requestsPerSecond": "Infinity",
        "reasonCancelled": null,
        "throttledUntil": {
            "hours": 0,
            "minutes": 0,
            "seconds": 0,
            "stringRep": "0ms",
            "millis": 0,
            "micros": 0,
            "microsFrac": 0.0,
            "millisFrac": 0.0,
            "secondsFrac": 0.0,
            "hoursFrac": 0.0,
            "minutesFrac": 0.0,
            "daysFrac": 0.0,
            "nanos": 0,
            "days": 0
        },
        "sliceStatuses": [],
        "writeableName": "bulk-by-scroll",
        "fragment": false,
        "successfullyProcessed": 1
    },
    "bulkFailures": [],
    "searchFailures": [],
    "timedOut": false,
    "total": 1,
    "versionConflicts": 0,
    "reasonCancelled": null,
    "deleted": 0,
    "batches": 1,
    "noops": 0,
    "created": 0,
    "bulkRetries": 0,
    "searchRetries": 0,
    "updated": 1,
    "fragment": true
}

(4).@UpdateByQuery属性说明

序号属性名默认值说明
1routing可选默认无路由
2waitForActiveShards-2活动分片数量,-2时不指定分片数量,-1或all指定全部分片
3timeout1m数值+时间单位(ms/s/m/h/M/y)
4refreshfalse
5maxDocs-1最大处理文档数,超过此文档数量,就不在处理。默认-1,是全部文档
6batchSize1000批量大小
7conflictsabort冲突策略:abort/procced
8slices1分片
9maxRetries11冲突后,最大重试次数
10shouldStoreResultfalse
11scrollKeepAlive0
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/677148.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号