中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Springboot如何集成Elasticsearch

發布時間:2021-12-14 12:28:30 來源:億速云 閱讀:198 作者:小新 欄目:開發技術

小編給大家分享一下Springboot如何集成Elasticsearch,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

    集成配置步驟

    步驟1:加入 Maven 相關依賴

    <!-- 指定 Springboot 版本 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.7</version>
        <relativePath/>
    </parent>
     
    <!-- 相關jar包 -->
    <dependencies>
        <!-- SpringBoot核心jar包 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!-- web開發包:包含Tomcat和Springmvc -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- ES 核心包 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>
        <!-- lombok 實體簡化插件 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>

    步驟2:配置 elasticsearch 的主機和端口

    elasticsearch:
      host: 127.0.0.1
      port: 9200

    Springboot如何集成Elasticsearch

    步驟3:配置 Elaseticsearch 客戶端

    @Data
    @Configuration
    @ConfigurationProperties(prefix = "elasticsearch")
    public class ElasticSearchConfig extends AbstractElasticsearchConfiguration {
     
        private String host;
        private Integer port;
     
        @Override
        public RestHighLevelClient elasticsearchClient() {
            return new RestHighLevelClient(RestClient.builder(new HttpHost(host, port)));
        }
     
    }

    Springboot如何集成Elasticsearch

    步驟4:創建文檔實體

    @Data
    @Document(indexName = "users")
    public class User {
     
        @Id
        @Field(type = FieldType.Long)
        private Long id;
     
        @Field(type = FieldType.Text)
        private String name;
     
        @Field(type = FieldType.Keyword)
        private String sex;
     
        @Field(type = FieldType.Integer)
        private Integer age;
     
        @Field(type = FieldType.Text)
        private String address;
     
    }

    Springboot如何集成Elasticsearch

    步驟5:創建 controller,service, dao 層

    (5.1)contrller 層

    @RestController
    @RequestMapping("/user")
    public class UserController {
     
        @Autowired
        private UserService userService;
     
    }

    (5.2)service 層

    public interface UserService {
     
    }

    (5.3)service 實現層(UserDao 見 5.4)

    @Service
    public class UserServiceImpl implements UserService {
     
        @Autowired
        private UserDao userDao;
     
    }

    (5.4)dao 層

    @Repository
    public interface UserDao extends ElasticsearchRepository<User, Long> {
     
    }

    整個相關類創建完成后,項目結構應該如下圖所示:

    Springboot如何集成Elasticsearch

    相關功能實現

    這里以實際功能舉例,并列出 controller 和 service 層的實現類寫法作為參考。

    主流的一些功能,ES 已經給你封裝,默認給與了支持(如:示例1-6),這些相關的實現不需要我們再寫 dao 層,但一些較為業務性的查詢,還需要自己手動來寫。

    1. 添加文檔

    controller 層:

    @PostMapping("/save")
    public String save(@RequestBody User user) {
        long id = System.currentTimeMillis();
        user.setId(id);
        userService.save(user);
        return "新增成功,id為:" + id;
    }

    service 層:

    @Override
    public Long save(User user) {
        userDao.save(user);
        return user.getId();
    }

    測試效果:

    Springboot如何集成Elasticsearch

     2. 修改文檔

    【注】新增文檔和修改文檔操作,dao 層都是調用的 save() 方法,當 id 不存在的時候,ES(ElasticSearch)就會執行新增操作,當 id 對象已經存在的時候,就會執行修改操作。

    controller 層:

    @PostMapping("/update")
    public String update(@RequestBody User user) {
        userService.save(user);
        return "修改成功";
    }

    service 層:

    @Override
    public Long save(User user) {
        userDao.save(user);
        return user.getId();
    }

    測試效果:

    Springboot如何集成Elasticsearch

     3. 根據ID查詢文檔

    controller 層:

    @GetMapping("/{id}")
    public User getById(@PathVariable("id") Long id) {
        return userService.getById(id);
    }

    service 層:

    @Override
    public User getById(Long id) {
        Optional<User> find = userDao.findById(id);
        if (find.isPresent()) {
            return find.get();
        }
        return null;
    }

    測試效果:

    Springboot如何集成Elasticsearch

     4. 根據ID刪除文檔

    controller 層:

    @DeleteMapping("/{id}")
    public String deleteById(@PathVariable("id") Long id) {
        userService.deleteById(id);
        return "刪除成功";
    }

    service 層:

    @Override
    public void deleteById(Long id) {
        userDao.deleteById(id);
    }

    測試效果:

    Springboot如何集成Elasticsearch

     5. 查詢所有文檔

    controller 層:

    @GetMapping("/all")
    public List<User> all() {
        return userService.getAll();
    }

    service 層:

    @Override
    public List<User> getAll() {
        Iterable<User> users = userDao.findAll();
        if (users == null) {
            return Collections.emptyList();
        }
        List<User> userList = new ArrayList<User>();
        users.forEach(o -> userList.add(o));
        return userList;
    }

    測試效果:

    Springboot如何集成Elasticsearch

     6. 條件查詢(單個條件)

    如:查詢name包含"瑪麗"的數據

    controller 層:

    @GetMapping("/listByName")
    public List<User> listByName(String name) {
        return userService.getListByName(name);
    }

    service 層:

    @Override
    public List<User> getListByName(String name) {
        return userDao.findByName(name);
    }

    dao 層:測試效果:

    Springboot如何集成Elasticsearch

     7. 條件查詢(多條件)

    如:查詢 name包含"瑪麗",年齡為25的數據。

    controller 層:

    @GetMapping("/listByNameAndAge")
    public List<User> listByNameAndAge(String name, Integer age) {
        return userService.getListByNameAndAge(name, age);
    }

    service 層:

    @Override
    public List<User> getListByNameAndAge(String name, Integer age) {
        return userDao.findByNameAndAge(name, age);
    }

    dao 層:

    List<User> findByNameAndAge(String name, Integer age);

    Springboot如何集成Elasticsearch

     8. 分頁查詢(降序)

    controller 層:

    @GetMapping("/listOrderByAgeDesc")
    public List<User> listOrderByAgeDesc() {
        return userService.getListOrderByAgeDesc();
    }

    service 層:

    @Override
    public List<User> getListOrderByAgeDesc() {
        return userDao.findByOrderByAgeDesc();
    }

    dao 層:

    List<User> findByOrderByAgeDesc();

    測試效果:

    Springboot如何集成Elasticsearch

     9. 分頁查詢(升序)

     controller 層:

    @GetMapping("/listOrderByAgeAsc")
    public List<User> listOrderByAgeAsc() {
        return userService.getListOrderByAgeAsc();
    }

    service 層:

    @Override
    public List<User> getListOrderByAgeAsc() {
        return userDao.findByOrderByAgeAsc();
    }

    dao 層:

    List<User> findByOrderByAgeAsc();

    測試效果:

    Springboot如何集成Elasticsearch

     10. 分頁查詢

    controller 層:

    @GetMapping("/page")
    public Page<User> page(Integer pageNum, Integer pageSize) {
        return userService.getPage(pageNum, pageSize);
    }

    service 層:

    @Override
    public Page<User> getPage(int pageNum, int pageSize) {
        // 注意,這里的pageNum是從0開始的,如果要查詢第1頁數據,pageNum應該為0
        Pageable pageable = PageRequest.of(pageNum, pageSize);
        return userDao.findAll(pageable);
    }

    測試效果:

    Springboot如何集成Elasticsearch

     11. 范圍查詢( > )

    controller 層:

    @GetMapping("/listGreaterThanAge")
    public List<User> listGreaterThanAge(Integer age) {
        return userService.getListGreaterThanAge(age);
    }

    service 層:

    @Override
    public List<User> getListGreaterThanAge(Integer age) {
        return userDao.findByAgeGreaterThan(age);
    }

    dao 層:

    List<User> findByAgeGreaterThan(Integer age);

    測試效果:

    Springboot如何集成Elasticsearch

    12. 范圍查詢( >= ) 

    controller 層:

    @GetMapping("/listGreaterThanEqualAge")
    public List<User> listGreaterThanEqualAge(Integer age) {
        return userService.getListGreaterThanEqualAge(age);
    }

    service 層:

    @Override
    public List<User> getListGreaterThanEqualAge(Integer age) {
        return userDao.findByAgeGreaterThanEqual(age);
    }

    dao 層:

    List<User> findByAgeGreaterThanEqual(Integer age);

    測試效果:

    Springboot如何集成Elasticsearch

     13. 范圍查詢( < )

    controller 層:

    @GetMapping("/listLessThanAge")
    public List<User> listLessThanAge(Integer age) {
        return userService.getListLessThanAge(age);
    }

    service 層:

    @Override
    public List<User> getListLessThanAge(Integer age) {
        return userDao.findByAgeLessThan(age);
    }

    dao 層:

    List<User> findByAgeLessThan(Integer age);

    測試效果:

    Springboot如何集成Elasticsearch

     14. 范圍查詢( <= )

    controller 層:

    @GetMapping("/listLessThanEqualAge")
    public List<User> listLessThanEqualAge(Integer age) {
        return userService.getListLessThanEqualAge(age);
    }

    service 層:

    @Override
    public List<User> getListLessThanEqualAge(Integer age) {
        return userDao.findByAgeLessThanEqual(age);
    }

    dao 層:

    List<User> findByAgeLessThanEqual(Integer age);

    測試效果:

    Springboot如何集成Elasticsearch

    ElasticSearch中對索引的一些常用操作

    1. 獲取Elasticsearch中所有的index:

    curl -XGET 'localhost:9200/_cat/indices?v&pretty'

    2. 獲取某索引下所有的type:

    獲取elasticsearch索引下所有的type定義

    curl -XGET 'localhost:9200/elasticsearch/_mapping'

    3. 刪除索引:

    刪除elasticsearch2索引

    curl -XDELETE 'localhost:9200/elasticsearch2?pretty'

    4. 刪除某索引下的某type數據:

    刪除索引elasticsearch下的article類型

    curl -XDELETE 'http://localhost:9200/elasticsearch/article/'

    5. 查看某索引的某type下所有的數據:

    查找elasticsearch索引中所有的類型為Company的數據

    http://localhost:9200/elasticsearch/Company/_search

    以上是“Springboot如何集成Elasticsearch”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    子洲县| 保定市| 普安县| 简阳市| 余姚市| 子长县| 当雄县| 万荣县| 塘沽区| 辽宁省| 兴隆县| 雅江县| 彩票| 万年县| 台东市| 绍兴县| 西峡县| 峨边| 芷江| 厦门市| 弋阳县| 闽侯县| 定南县| 宝山区| 太湖县| 寿阳县| 德令哈市| 天水市| 乐清市| 石楼县| 岳阳市| 永定县| 合水县| 壤塘县| 五河县| 南涧| 卫辉市| 兰坪| 镇江市| 清镇市| 泽库县|