Elasticsearch
简介
Elasticsearch 是基于 Apache Lucene 构建的分布式搜索和分析引擎,提供近实时的全文搜索、结构化搜索和分析能力。
核心概念
- Index:索引,相当于数据库中的表
- Document:文档,索引中的基本数据单元(JSON)
- Mapping:映射,定义字段类型和分析规则
- Shard:分片,将索引数据水平分割
- Replica:副本,分片的冗余备份
基本操作
索引文档
json
POST /users/_doc/1
{
"name": "张三",
"age": 25,
"city": "北京",
"description": "Java 后端开发工程师"
}搜索文档
json
GET /users/_search
{
"query": {
"match": {
"description": "Java 开发"
}
},
"sort": [
{ "age": "desc" }
]
}聚合分析
json
GET /users/_search
{
"size": 0,
"aggs": {
"by_city": {
"terms": {
"field": "city.keyword"
}
}
}
}Java 客户端
java
// Spring Data Elasticsearch
@Repository
public interface UserRepository extends ElasticsearchRepository<User, String> {
List<User> findByName(String name);
@Query("{\"match\": {\"description\": \"?0\"}}")
List<User> searchByDescription(String keyword);
}
// 使用 RestHighLevelClient
SearchRequest request = new SearchRequest("users");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.matchQuery("description", "Java"));
request.source(sourceBuilder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);适用场景
- 全文搜索:网站内容搜索、文档检索
- 日志分析:ELK(Elasticsearch + Logstash + Kibana)
- 应用性能监控(APM)
- 商业智能分析和可视化