1. 程式人生 > >今日上市的50億專案ElasticSearch瞭解一下2

今日上市的50億專案ElasticSearch瞭解一下2

在springboot專案中操作ElasticSearch

1.pom.xml依賴

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>

版本和parent版本相關,注意安裝的es要和springboot對應(springboot 1.5.17對應es 2.4)

2.application.yml配置

spring:
    data:
        elasticsearch:
               #預設為elasticsearch,是es安裝配置檔案中的cluster-name
            cluster-name: my-application
               #配置es節點資訊,逗號分隔,如果沒有指定,則啟動ClientNode,注意埠和配置檔案中不一樣http是9200,java中預設用9300
            cluster-nodes: 118.24.78.36:9300

注意 是在spring下面

3.程式碼操作es 方式一

包名沒在程式碼中,自己定包路徑

用實體對應es中的index,type,id

entity

import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;

//指定的 index 和type
@Document(indexName = "product", type = "book")
public class Book {
    //指定的id
    @Id
    String id;
    String name;
    String message;
    String type;
}
//getter setter 省略

dao 直接繼承ElasticsearchRepository,使用其中預設的api

import com.baseweb.myfield.esDemo.entity.Book;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

public interface BookDao extends ElasticsearchRepository<Book,String> {
}

controller 省略service層,bookDao都是操作ElasticsearchRepository中的介面

import com.baseweb.myfield.esDemo.dao.BookDao;
import com.baseweb.myfield.esDemo.entity.Book;
import org.elasticsearch.index.query.QueryStringQueryBuilder;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

@RestController
@RequestMapping("/book")
public class BookController {
    @Autowired
    private BookDao bookDao;

    /**
     * 1、新增
     * @param book
     * @return
     */
    @PostMapping("/insert")
    public Book insertBook(@RequestBody  Book book) throws Exception {
        if(book == null){
            throw new Exception("boot 為空");
        }
        bookDao.save(book);
        return book;
    }
    /**
     * 2、查 通過id
     * @param id
     * @return
     */
    @GetMapping("/get/{id}")
    public Book getBookById(@PathVariable String id) {
        return bookDao.findOne(id);
    }
    /**
     * 3、查  通過其他屬性++:全文檢索(根據整個實體的所有屬性,可能結果為0個)
     * @param q
     * @return
     */
    @GetMapping("/select/{q}")
    public List<Book> testSearch(@PathVariable String q) {
        QueryStringQueryBuilder builder = new QueryStringQueryBuilder(q);
        Iterable<Book> searchResult = bookDao.search(builder);
        Iterator<Book> iterator = searchResult.iterator();
        List<Book> list = new ArrayList<Book>();
        while (iterator.hasNext()) {
            list.add(iterator.next());
        }
        return list;
    }
    /**
     * 4、更新資料,通過id
     * @param book
     * @return
     */
    @PutMapping("/update")
    public Book updateBook(@RequestBody Book book) {
        bookDao.save(book);
        return book;
    }
    /**
     * 5、刪 通過id
     * @param id
     * @return
     */
    @DeleteMapping("/delete/{id}")
    public Book insertBook(@PathVariable String id) {
        Book book = bookDao.findOne(id);
        bookDao.delete(id);
        return book;
    }
}

4.測試

啟動springboot專案

用postman傳送介面測試

開始查詢一下es,資料為空

新增

查詢es所有資料,有了

測試查詢介面,有資料

測試更新介面,注意要用id去更新,所以id是不能變的

再次查詢

說明更新成功

通過屬性查詢

刪除

再次查詢

返回為空,刪除成功