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属性说明
| 序号 | 属性名 | 默认值 | 说明 |
|---|---|---|---|
| 1 | docAsUpsert | false | 设置true,当文档不存在时,做插入操作 |
| 2 | retryOnConflict | 0 | 设置版本冲突时,重试的次数 |
| 3 | refreshPolicy | RefreshPolicy.NONE | 默认不刷新 |
| 4 | waitForActiveShards | -2 | 活动分片数量,-2时不指定分片数量,-1或all指定全部分片 |
| 5 | scriptedUpsert | false | 运行脚本,无论文档是否存在 |
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属性说明
| 序号 | 属性名 | 默认值 | 说明 |
|---|---|---|---|
| 1 | routing | 可选 | 默认无路由 |
| 2 | waitForActiveShards | -2 | 活动分片数量,-2时不指定分片数量,-1或all指定全部分片 |
| 3 | timeout | 1m | 数值+时间单位(ms/s/m/h/M/y) |
| 4 | refresh | false | |
| 5 | maxDocs | -1 | 最大处理文档数,超过此文档数量,就不在处理。默认-1,是全部文档 |
| 6 | batchSize | 1000 | 批量大小 |
| 7 | conflicts | abort | 冲突策略:abort/procced |
| 8 | slices | 1 | 分片 |
| 9 | maxRetries | 11 | 冲突后,最大重试次数 |
| 10 | shouldStoreResult | false | |
| 11 | scrollKeepAlive | 0 |



