天天看點

8.5 SpringBoot內建ElasticSearch之查詢文檔

1.condition開發

在項目目錄“/src/main/java/com/example/es”下建立condition目錄,并在condition目錄下建立SampleEmployeeCondition查詢條件類,具體代碼如下。

@Data
public class SampleEmployeeCondition {
    @Must
    @Field("employeeId")
    private String employeeId;

    @Must
    @Field("name")
    private String name;

    @Must
    @Field("age")
    private Integer age;

    @Must
    @Field("birthday")
    private String birthday;

    @Must
    @Field("job")
    private String job;

    @Must
    @Field("salary")
    private Float salary;
}      

2.mapper開發

在項目目錄“/src/main/java/com/example/es”的EmployeeMapper類中新增查詢員工資訊接口,具體代碼如下。

@EasyMapper(indices = "employee", clusterRouter = "sampleCluster")
public interface EmployeeMapper {
    /**
     * 查詢員工
     *
     * @param sampleEmployeeCondition 員工
     * @return Employee,可能為null
     */
    @Get
    EmployeeEntity getEmployee(SampleEmployeeCondition sampleEmployeeCondition);

    /**
     * 查詢員工
     *
     * @param id 員工文檔id
     * @return Employee,可能為null
     */
    @Get
    EmployeeEntity getEmployee(String id);

    /**
     * 查詢員工
     *
     * @param id 員工文檔id
     * @return Option
     */
    @Get
    Optional<EmployeeEntity> getEmployeeOptional(String id);

    /**
     * 查詢員工
     *
     * @param id 員工文檔id
     * @return GetResponse
     */
    @Get
    GetResponse getEmployeeGetResponse(String id);

    /**
     * 查詢員工
     *
     * @param id 員工文檔id
     * @return 異步Optional
     */
    @Get
    CompletableFuture<Optional<EmployeeEntity>> getEmployeeCompletableFuture(String id);
}      

3.controller開發

在項目目錄“/src/main/java/com/example/es”下的EmployeeController類中新增查詢員工資訊接口,以indexEmployeeString接口為例示範開發步驟,具體代碼如下。

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

    @ResponseBody
    @RequestMapping(value = "/getEmployee", method = RequestMethod.POST)
    public EmployeeEntity getEmployee(@RequestParam String id) {
        return employeeMapper.getEmployee(id);
    }
}      

4.測試

啟動項目,然後在postman中請求“http://localhost:8080/employee/getEmployee?id=4SB70X0B68NPz8Jszbaa”,成功後傳回文檔id所對應的文檔資訊。

{
    "id": null,
    "employeeId": "10000002",
    "name": "Stephen Curry",
    "age": 27,
    "birthday": "1995-08-06",
    "job": "Java engineer",
    "salary": 20000.0
}      

5.@Get屬性說明

序号 屬性名 預設值 說明
1 preference 設定查詢偏好,影響查詢的分片政策
2 refresh false 設定是否重新整理,預設不重新整理
3 realtime true 設定是否實時查詢,預設實時

6.Multi Get API

(1).mapper開發

在項目目錄“/src/main/java/com/example/es”的EmployeeMapper類中新增批量查詢員工資訊接口,具體代碼如下。

@EasyMapper(indices = "employee", clusterRouter = "sampleCluster")
public interface EmployeeMapper {
    /**
     * 多員工查詢
     *
     * @param ids 多員工id
     * @return MultiGetResponse
     */
    @MultiGet
    MultiGetResponse getEmployeesResponse(String... ids);

    /**
     * 多員工查詢
     *
     * @param ids 多員工id
     * @return 員工集合
     */
    @MultiGet
    List<EmployeeEntity> getEmployees(String... ids);

    /**
     * 多員工查詢
     *
     * @param ids 多員工id
     * @return MultiGetItemResponse[]
     */
    @MultiGet
    MultiGetItemResponse[] getEmployeesItemResponse(String... ids);

    /**
     * 多員工查詢
     *
     * @param sampleEmployeeConditionList 多員工
     * @return 員工數組
     */
    @MultiGet
    EmployeeEntity[] getEmployees(List<SampleEmployeeCondition> sampleEmployeeConditionList);

    /**
     * 多員工查詢
     *
     * @param sampleEmployeeConditionList 多員工id
     * @return List<MultiGetItemResponse>
     */
    @MultiGet
    List<MultiGetItemResponse> getEmployeesItemResponse(List<SampleEmployeeCondition> sampleEmployeeConditionList);

    /**
     * 多員工查詢
     *
     * @param ids 多員工id
     * @return List<Optional < EmployeeEntity>>
     */
    @MultiGet
    List<Optional<EmployeeEntity>> getEmployeesOptional(String... ids);

    /**
     * 多員工查詢
     *
     * @param sampleEmployeeConditionList 多員工
     * @return Optional<RecentOrder>[]
     */
    @MultiGet
    Optional<EmployeeEntity>[] getEmployeesOptional(List<SampleEmployeeCondition> sampleEmployeeConditionList);

    /**
     * 多員工異步查詢
     *
     * @param sampleEmployeeConditionList 多員工
     * @return CompletableFuture<Optional < EmployeeEntity>[]>
     */
    @MultiGet
    CompletableFuture<Optional<EmployeeEntity>[]> getEmployeesOptionalFuture(List<SampleEmployeeCondition> sampleEmployeeConditionList);
}      
@RestController
@RequestMapping("/employee")
public class EmployeeController {
    @Resource
    private EmployeeMapper employeeMapper;

    @ResponseBody
    @RequestMapping(value = "/getEmployeesResponse", method = RequestMethod.POST)
    public MultiGetResponse getEmployeesResponse(@RequestBody List<String> integerList) {
        return employeeMapper.getEmployeesResponse(integerList.toArray(new String[integerList.size()]));
    }
}      
["4iB70X0B68NPz8Js6rb3","5iB80X0B68NPz8JsY7aI"]      
{
    "responses": [
        {
            "response": {
                "fields": {},
                "id": "4iB70X0B68NPz8Js6rb3",
                "type": "_doc",
                "index": "employee",
                "source": {
                    "birthday": "1987-12-25",
                    "name": "LeBron James",
                    "employeeId": 10000003,
                    "job": "Technical director",
                    "salary": 50000.0,
                    "age": 35
                },
                "version": 2,
                "primaryTerm": 1,
                "seqNo": 18,
                "sourceAsBytes": "eyJlbXBsb3llZUlkIjoxMDAwMDAwMywibmFtZSI6IkxlQnJvbiBKYW1lcyIsImpvYiI6IlRlY2huaWNhbCBkaXJlY3RvciIsImFnZSI6MzUsInNhbGFyeSI6NTAwMDAuMCwiYmlydGhkYXkiOiIxOTg3LTEyLTI1In0=",
                "exists": true,
                "sourceEmpty": false,
                "sourceAsMap": {
                    "birthday": "1987-12-25",
                    "name": "LeBron James",
                    "employeeId": 10000003,
                    "job": "Technical director",
                    "salary": 50000.0,
                    "age": 35
                },
                "sourceInternal": {
                    "fragment": true
                },
                "sourceAsString": "{\"employeeId\":10000003,\"name\":\"LeBron James\",\"job\":\"Technical director\",\"age\":35,\"salary\":50000.0,\"birthday\":\"1987-12-25\"}",
                "sourceAsBytesRef": {
                    "fragment": true
                },
                "fragment": false
            },
            "failure": null,
            "id": "4iB70X0B68NPz8Js6rb3",
            "type": "_doc",
            "index": "employee",
            "failed": false
        },
        {
            "response": {
                "fields": {},
                "id": "5iB80X0B68NPz8JsY7aI",
                "type": "_doc",
                "index": "employee",
                "source": {
                    "birthday": "1997-08-02",
                    "name": "Jason Tatum",
                    "employeeId": 10000007,
                    "job": "Java engineer",
                    "salary": 15000.0,
                    "age": 24
                },
                "version": 3,
                "primaryTerm": 1,
                "seqNo": 4,
                "sourceAsBytes": "eyJlbXBsb3llZUlkIjoxMDAwMDAwNywibmFtZSI6Ikphc29uIFRhdHVtIiwiam9iIjoiSmF2YSBlbmdpbmVlciIsImFnZSI6MjQsInNhbGFyeSI6MTUwMDAuMCwiYmlydGhkYXkiOiIxOTk3LTA4LTAyIn0=",
                "exists": true,
                "sourceEmpty": false,
                "sourceAsMap": {
                    "birthday": "1997-08-02",
                    "name": "Jason Tatum",
                    "employeeId": 10000007,
                    "job": "Java engineer",
                    "salary": 15000.0,
                    "age": 24
                },
                "sourceInternal": {
                    "fragment": true
                },
                "sourceAsString": "{\"employeeId\":10000007,\"name\":\"Jason Tatum\",\"job\":\"Java engineer\",\"age\":24,\"salary\":15000.0,\"birthday\":\"1997-08-02\"}",
                "sourceAsBytesRef": {
                    "fragment": true
                },
                "fragment": false
            },
            "failure": null,
            "id": "5iB80X0B68NPz8JsY7aI",
            "type": "_doc",
            "index": "employee",
            "failed": false
        }
    ],
    "fragment": false
}