Skip to content

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)
  • 商业智能分析和可视化