pom.xml引入ElasticSearch
<!--ElasticSearch-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
application.yml配置
spring:
elasticsearch:
uris:
- localhost:9200
username: elastic
password: password
啟動類加入注解@EnableElasticsearchRepositories
@EnableElasticsearchRepositories(basePackages = "com.meta.es.repositories")//repository所在的包路徑
@SpringBootApplication
public class SpringBootApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootApplication.class, args);
}
}
ElasticSearchEntity
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
import java.util.Date;
@Data
@Document(indexName = "elastic")//indexName索引名稱等價(jià)于MySQL的表
public class ElasticSearchEntity {
@Id
@Field(type = FieldType.Keyword)//關(guān)鍵字在查詢的時(shí)候不會被拆分
private String id;
@Field(type = FieldType.Text)//字符串對應(yīng)文本類型
private String name;
@Field(type = FieldType.Date, format = DateFormat.date_hour_minute_second_millis)//日期類型
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
private Date createTime;
@Field(type = FieldType.Boolean)//布爾類型
private boolean isDelete;
}
Repository類繼承ElasticsearchRepository
import org.springframework.data.elasticsearch.annotations.Query;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import java.util.List;
//ElasticsearchRepository<實(shí)體類,主鍵類型>
public interface ElasticSearchRepository extends ElasticsearchRepository<ElasticSearchEntity,String> {
List<ElasticSearchEntity> findByName(String name);
//自定義查詢語句
@Query("{\"match\":{\"name\":\"?0\"}}")
List<ElasticSearchEntity> findAllByNameUsingAnnotations(String name);
}
ElasticSearchService
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
public class ElasticSearchService {
@Resource
private ElasticSearchRepository elasticSearchRepository;
/**
* 新增/修改
*/
public void save(final ElasticSearchEntity elasticSearchEntity) {
this.elasticSearchRepository.save(elasticSearchEntity);
}
/**
* 通過ID查詢
*/
public ElasticSearchEntity findById(final String id){
return this.elasticSearchRepository.findById(id).orElse(null);
}
/**
* 通過ID刪除
*/
public void deleteById(String id){
this.elasticSearchRepository.deleteById(id);
}
/**
* 通過名稱模糊查詢
*/
public List<ElasticSearchEntity> findByName(final String name){
return this.elasticSearchRepository.findByName(name);
}
/**
* 通過使用注解名稱模糊查詢
*/
public List<ElasticSearchEntity> findAllByNameUsingAnnotations(String name){
return this.elasticSearchRepository.findAllByNameUsingAnnotations(name);
}
/**
* 分頁
* @param size 數(shù)量
*/
public Page<ElasticSearchEntity> findAllByPage(int page,int size){
//Sort sort = Sort.by(Sort.Order.desc("create_date"));//排序
//Pageable pageable =PageRequest.of(Integer.parseInt(page), Integer.parseInt(size), sort);
Sort sort = Sort.by(Sort.Order.desc("createTime"));//根據(jù)
Pageable pageable =PageRequest.of(page, size, sort);
return this.elasticSearchRepository.findAll(pageable);
}
}
ElasticSearchController
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping("elasticsearch")
public class ElasticSearchController {
@Resource
private ElasticSearchService elasticSearchService;
/**
* 新增/修改,如果id一致就修改,否則新增
* @param elasticSearchEntity 實(shí)體類
*/
@PostMapping
public void save(@RequestBody final ElasticSearchEntity elasticSearchEntity) {
elasticSearchService.save(elasticSearchEntity);
}
/**
* 通過ID查詢
* @param id ID
* @return
*/
@GetMapping("/{id}")
public ElasticSearchEntity findById(@PathVariable final String id) {
return elasticSearchService.findById(id);
}
/**
* 通過ID刪除
* @param id ID
* @return
*/
@DeleteMapping("/{id}")
public boolean deleteById(@PathVariable String id) {
elasticSearchService.deleteById(id);
return true;
}
/**
* 通過名稱模糊查詢
* @param name 名稱
* @return
*/
@GetMapping("/name/{name}")
public List<ElasticSearchEntity> findAllByName(@PathVariable String name) {
return elasticSearchService.findByName(name);
}
/**
* 使用注釋的方式名稱模糊查詢,即:@Query()注解
* @param name 名稱
* @return
*/
@GetMapping("/name/{name}/annotations")
public List<ElasticSearchEntity> findAllByNameAnnotations(@PathVariable String name) {
return elasticSearchService.findAllByNameUsingAnnotations(name);
}
/**
* 簡單分頁查詢
* @param page 起始頁,默認(rèn)從0開始
* @param size 每頁數(shù)量
* @return
*/
@GetMapping("/page")
public Page<ElasticSearchEntity> findAllByPage(@RequestParam(name = "page",defaultValue = "0") int page, @RequestParam(name = "size",defaultValue = "10") int size){
return elasticSearchService.findAllByPage(page,size);
}
}
測試
查看創(chuàng)建的索引(相當(dāng)于MySQL的表)
method:GET
localhost:9200/_cat/indices
刪除索引
method:DELETE
localhost:9200/{索引名稱}
查看索引里的全部數(shù)據(jù),elastic是實(shí)體類@Document定義的indexName
method:GET文章來源:http://www.zghlxwxcb.cn/news/detail-417314.html
localhost:9200/elastic/_search
新增索引里沒有ID就是新增,有ID就是修改
修改索引里沒有ID就是新增,有ID就是修改
查詢
刪除
分頁
通過name模糊查詢文章來源地址http://www.zghlxwxcb.cn/news/detail-417314.html
到了這里,關(guān)于Springboot集成ElasticSearch實(shí)現(xiàn)簡單的crud、簡單分頁、模糊查詢的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!