elasticsearch介紹
ElasticSearch是一個基於Lucene的搜索服務器。它提供了一個分佈式多用戶能力的全文搜索引擎,基於RESTful web接口。
中文社區 下載:https://elasticsearch.cn/download/
目前elastic已升級到7.0以上版本 去除了type概念
整合步驟:
1、添加依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
2、properties配置
#es集羣名稱
spring.data.elasticsearch.cluster-name=elasticsearch
#es節點 多個節點直接後面","分割,添加地址
spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300
spring.data.elasticsearch.repositories.enabled=true
3、創建索引對象
@Component
@Document(indexName = "opera",type = "record",shards = 1,replicas = 0)
public interface OperaRepository extends ElasticsearchRepository<OperaBO,String> {
}
4、實體創建 注意序列化
@Data
@Document(indexName = "opera",type = "record")
public class OperaBO implements Serializable {
private static final long serialVersionUID =1L;
/**
* 唯一標識
*/
private String id;
/**
* 被操作人的唯一標識
*/
private String sourceId;
/**
* 操作詳細記錄
*/
private String operateDetail;
/**
* 操作類型 0表示純動作 1表示編輯
*/
private Integer operaType;
}
5、測試
@RestController
@RequestMapping("/api/es")
public class Testelastic {
@Autowired
private OperaRepository repository;
/**
* 保存單條
* @return
*/
@RequestMapping(value = "/save", method = RequestMethod.POST)
public String save() {
OperaBO operaBO = new OperaBO() {{
setId(UUID.randomUUID().toString());
setOperateDetail("測試elastic");
setSourceId(UUID.randomUUID().toString());
setModuleName("生產線");
}};
repository.save(operaBO);
return "OK";
}
/**
* 保存多條
* @return
*/
@RequestMapping(value = "saveall",method = RequestMethod.GET)
public String saveAll(){
List<OperaBO> list = new ArrayList<>(16);
OperaBO operaBO = new OperaBO() {{
setId(UUID.randomUUID().toString());
setOperateDetail("測試elastic1");
setSourceId("85339f82-25be-474a-8b38-8b522fed33c0");
setModuleName("生產線1");
setOperaType(0);
}};
OperaBO operaBO1 = new OperaBO() {{
setId(UUID.randomUUID().toString());
setOperateDetail("測試elastic2");
setSourceId("b8ffdd48-332e-4836-bf40-2ce5d1629d10");
setModuleName("生產線2");
setOperaType(1);
}};
list.add(operaBO);
list.add(operaBO1);
repository.saveAll(list);
return "ok";
}
/**
* 多條件查詢
* @param operaBO
* @return
*/
@RequestMapping(value = "search",method = RequestMethod.POST)
public Object search(@RequestBody OperaBO operaBO){
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
queryBuilder.must(QueryBuilders.matchQuery("sourceId", operaBO.getSourceId()));
queryBuilder.must(QueryBuilders.matchQuery("operaType",operaBO.getOperaType()));
Iterable<OperaBO> search = repository.search(queryBuilder);
return search;
}
/**
* 查詢全部
* @return
*/
@RequestMapping(value = "all",method = RequestMethod.GET)
public Object searchAll(){
MatchAllQueryBuilder allQueryBuilder = QueryBuilders.matchAllQuery();
Iterable<OperaBO> operaBOS = repository.search(allQueryBuilder);
return operaBOS;
}
/**
* 查詢單條
* @return
*/
@RequestMapping(value = "all",method = RequestMethod.GET)
public Object searchsingle(){
MatchQueryBuilder QueryBuilder = QueryBuilders.matchQuery();
QueryBuilders.matchQuery("sourceId", operaBO.getSourceId());
OperaBO operaBO = repository.search(QueryBuilder);
return operaBO;
}
}
源碼地址:https://github.com/MandalasWang/elasticdemo