Elasticsearch(简称ES)是一个开源的分布式搜索和分析引擎,它被用于全文搜索、结构化搜索、分析以及这些数据的存储。Elasticsearch 是基于 Apache Lucene 的搜索引擎,提供了一个分布式多租户能力的全文搜索引擎,通过 RESTful API 进行操作。
Elasticsearch常用于日志和事务数据分析、全文搜索应用、结构化数据的搜索分析以及安全智能等领域。在大数据领域,Elasticsearch与Hadoop、Spark等大数据处理工具的结合使用,可以实现更为复杂的数据分析和处理任务。
Elasticsearch具有以下特点:
Elasticsearch主要用途场景:
org.springframework.boot
spring-boot-starter-data-elasticsearch
org.elasticsearch.client
elasticsearch-rest-high-level-client
spring:
data:
elasticsearch:
cluster-nodes: localhost:9200
@Document(indexName = "product", createIndex = false)
public class Product {
@Id
private String id;
@Field(type = FieldType.Text, fielddata = true)
private String name;
@Field(type = FieldType.Keyword)
private String category;
@Field(type = FieldType.Float)
private float price;
public Product() {
}
public Product(String id, String name, String category, float price) {
this.id = id;
this.name = name;
this.category = category;
this.price = price;
}
// getter和setter方法
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
}
public interface ProductRepository extends ElasticsearchRepository {
// 根据名称查找产品
Iterable findByName(String name);
}
@Service
public class ProductService {
@Autowired
private ProductRepository productRepository;
public Product saveProduct(Product product) {
return productRepository.save(product);
}
public List findAllProducts() {
return productRepository.findAll();
}
public List findProductByName(String name) {
return (List) productRepository.findByName(name);
}
public void deleteProduct(String id) {
productRepository.deleteById(id);
}
}
@RestController
@RequestMapping("/products")
public class ProductController {
@Autowired
private ProductService productService;
@PostMapping
public Product saveProduct(@RequestBody Product product) {
return productService.saveProduct(product);
}
@GetMapping
public List getAllProducts() {
return productService.findAllProducts();
}
@GetMapping("/name/{name}")
public List getProductByName(@PathVariable String name) {
return productService.findProductByName(name);
}
@DeleteMapping("/{id}")
public void deleteProduct(@PathVariable String id) {
productService.deleteProduct(id);
}
}
在实际使用中对于更复杂的查询和高级功能,需要利用Elasticsearch的更高级特性,例如分页、排序、聚合等,编写自定义的查询方法或使用Elasticsearch的原生查询DSL。