今日上市的50億專案ElasticSearch瞭解一下2
阿新 • • 發佈:2018-12-13
在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是不能變的
再次查詢
說明更新成功
通過屬性查詢
刪除
再次查詢
返回為空,刪除成功