1.condition开发
在项目目录“/src/main/java/com/example/es/condition”的EmployeeCondition类中实现ScrollProvider接口,具体代码如下。

@Data
public class EmployeeCondition extends SampleEmployeeCondition implements RoutingProvider, ScoreFunctionProvider, SortProvider, ScrollProvider {
@Ignore
private String scrollId;

@Ignore
private boolean clear;

@Override
public String getScrollId() {
return scrollId;
}

@Override
public boolean isClearScroll() {
return clear;
}
}

2.mapper开发
在项目目录“/src/main/java/com/example/es”的EmployeeMapper类中新增scroll查询和清除scroll快照的接口,具体代码如下。

@EasyMapper(indices = "employee", clusterRouter = "sampleCluster")
public interface EmployeeMapper {
/**
* scroll查询
*
* @param employeeCondition 搜索条件
* @param pageable 分页信息
* @return 响应
*/
@SearchScroll(keepAlive = "5s")
ScrollResponse<EmployeeEntity> searchScroll(EmployeeCondition employeeCondition, Pageable pageable);

/**
* 清除scroll快照
*
* @param scrollId
* @param extractor
* @return boolean
*/
@SearchScroll(clearScroll = true)
boolean clearSearchScroll(String scrollId, ResponseExtractor<Boolean> extractor);
}

3.controller开发
在项目目录“/src/main/java/com/example/es”下的EmployeeController类中修改查询员工信息接口,具体代码如下。

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

@ResponseBody
@RequestMapping(value = "/queryEmployeeList", method = RequestMethod.GET)
public List<EmployeeEntity> queryEmployeeList() {
List<EmployeeEntity> employeeEntityList = new ArrayList<>();
ScrollResponse<EmployeeEntity> response = null;
EmployeeCondition employeeCondition = new EmployeeCondition();
employeeCondition.setAgeRange(Range.of(25, 35).closeLeft().closeRight());
//页数
int count = 2;
//每页的文档数量
int size = 2;
Pageable pageAble = Pageable.first(size);
for (int i = 0; i < count; i++) {
response = employeeMapper.searchScroll(employeeCondition, pageAble);
employeeCondition.setScrollId(response.getScrollId());
if (i == count - 1) {
Iterator<EmployeeEntity> iterator = response.getResponse().iterator();
while (iterator.hasNext()) {
employeeEntityList.add(iterator.next());
}
}
}

// employeeMapper.clearSearchScroll(response.getScrollId(), new ResponseExtractor<Boolean>() {
// @Override
// public Boolean extractData(ActionResponse response) {
// ClearScrollResponse scrollResponse = narrow(response, ClearScrollResponse.class);
// return scrollResponse.isSucceeded();
// }
// });

return employeeEntityList;
}
}

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

[
{
"id": "10000001",
"employeeId": "10000001",
"name": "James Harden",
"age": 31,
"birthday": "1991-01-01",
"job": "Java engineer",
"salary": 30000.0,
"hobby": [
"swimming",
"running",
"basketball",
"football"
],
"profile": {
"nickName": "squirrel",
"avatar": "https://www.avatar.com/10000001.png",
"grade": "diamonds"
},
"relative": [
{
"employeeId": "10000002"
},
{
"employeeId": "10000004"
}
]
},
{
"id": "10000003",
"employeeId": "10000003",
"name": "LeBron James",
"age": 35,
"birthday": "1987-12-25",
"job": "Technical director",
"salary": 50000.0,
"hobby": [
"boxing",
"climbing",
"football"
],
"profile": {
"nickName": "mountain",
"avatar": "https://www.avatar.com/10000003.png",
"grade": "diamonds"
},
"relative": [
{
"employeeId": "10000002"
}
]
}
]