# Elasticsearch入门知识点总结 ## 一、Elasticsearch概述 ### 1.1 什么是Elasticsearch Elasticsearch(简称ES)是一个基于Lucene构建的**开源分布式搜索和分析引擎**,具有以下核心特性: - **近实时搜索**:数据索引后几乎立即可查(通常1秒内) - **分布式架构**:支持水平扩展,可处理PB级数据 - **RESTful API**:所有操作通过HTTP接口完成 - **多数据类型支持**:结构化/非结构化文本、数字、地理空间数据等 - **丰富的查询DSL**:提供灵活的JSON格式查询语法 ### 1.2 典型应用场景 | 场景类型 | 具体应用案例 | |----------------|----------------------------------| | 全文搜索 | 电商商品搜索、新闻网站内容检索 | | 日志分析 | ELK栈中的日志存储与分析 | | 指标分析 | 应用性能监控(APM)数据聚合 | | 安全分析 | SIEM系统中的威胁检测 | | 地理空间分析 | 位置服务、轨迹分析 | ### 1.3 核心概念对比 ```sql -- 与传统关系型数据库概念对照 RDBMS → Elasticsearch Database → Index Table → Type(7.x后已废弃) Row → Document Column → Field Schema → Mapping SQL → Query DSL
graph TD A[Node] --> B[Master-eligible] A --> C[Data] A --> D[Ingest] A --> E[ML] A --> F[Coordinating]
// 创建索引时指定分片配置 PUT /my_index { "settings": { "number_of_shards": 3, "number_of_replicas": 1 } }
# 查看所有索引 GET /_cat/indices?v # 创建索引(指定mapping) PUT /products { "mappings": { "properties": { "name": { "type": "text" }, "price": { "type": "double" }, "tags": { "type": "keyword" } } } } # 删除索引 DELETE /old_index
数据类型 | 说明 | 典型应用 |
---|---|---|
text | 全文检索字段,会被分词 | 商品描述、文章内容 |
keyword | 精确值匹配,不分词 | 状态标签、分类ID |
numeric | 包括long,integer,double等 | 价格、销量 |
date | 日期类型,支持多种格式 | 创建时间、日志时间戳 |
geo_point | 经纬度坐标 | 位置搜索 |
nested | 嵌套对象类型 | 订单中的商品列表 |
// 禁用动态映射 PUT /strict_index { "mappings": { "dynamic": false, "properties": { "user": { "type": "text" } } } }
// 插入文档(指定ID) PUT /products/_doc/100 { "name": "无线蓝牙耳机", "price": 299.00, "tags": ["数码","蓝牙"] } // 更新文档(部分字段) POST /products/_update/100 { "doc": { "price": 259.00 } } // 批量操作 POST /_bulk { "index" : { "_index" : "products", "_id" : "101" } } { "name": "智能手表", "price": 899 } { "delete" : { "_index" : "products", "_id" : "102" } }
GET /index/_search { "query": { ... }, // 查询条件 "aggs": { ... }, // 聚合分析 "sort": [ ... ], // 排序规则 "from": 0, // 分页起始 "size": 10 // 返回条数 }
// 1. 匹配查询(分词处理) { "query": { "match": { "name": "无线耳机" } } } // 2. 精确匹配 { "query": { "term": { "tags": "蓝牙" } } } // 3. 范围查询 { "query": { "range": { "price": { "gte": 200, "lte": 500 } } } } // 4. 布尔组合 { "query": { "bool": { "must": [ { "match": { "name": "耳机" } } ], "filter": [ { "range": { "price": { "lte": 300 } } } ] } } }
// 按价格区间分桶统计 GET /products/_search { "size": 0, "aggs": { "price_ranges": { "range": { "field": "price", "ranges": [ { "to": 100 }, { "from": 100, "to": 500 }, { "from": 500 } ] } } } }
# 查看集群健康 GET /_cluster/health # 输出示例: { "cluster_name": "es-cluster", "status": "green", # green/yellow/red "number_of_nodes": 5, "active_primary_shards": 10, "active_shards": 20 }
索引设计优化
查询优化技巧
JVM配置建议
# jvm.options配置示例 -Xms4g -Xmx4g -XX:+UseG1GC
PUT /ecommerce { "mappings": { "properties": { "title": { "type": "text", "analyzer": "ik_max_word" }, "category": { "type": "keyword" }, "price": { "type": "scaled_float", "scaling_factor": 100 }, "specs": { "type": "nested" }, "sales": { "type": "integer" } } } }
GET /ecommerce/_search { "query": { "bool": { "must": [ { "match": { "title": "智能手机" } } ], "filter": [ { "term": { "category": "数码" } } ] } }, "sort": [ { "sales": "desc" } ] }
{ "query": { "function_score": { "query": { "bool": { "should": [ { "match": { "title": "华为" }}, { "match": { "specs.brand": "华为" }} ] } }, "functions": [ { "field_value_factor": { "field": "sales" }} ] } } }
慢查询定位
// 开启慢查询日志 PUT /_settings { "index.search.slowlog.threshold.query.warn": "10s" }
热点分片识别
GET /_cat/shards?v&h=index,shard,prirep,docs,store,ip,node&s=store:desc
写入一致性策略:通过wait_for_active_shards
参数控制
PUT /index/_doc/1?wait_for_active_shards=2
读一致性:使用preference
参数控制读请求路由
GET /index/_search?preference=_primary
本文共约4500字,涵盖了Elasticsearch的核心概念、操作方法和实战技巧。建议读者结合官方文档和实际环境练习,逐步掌握这个强大的搜索分析引擎。随着版本更新,部分功能可能发生变化,请以最新官方文档为准。 “`
该文档包含以下特点: 1. 结构化层次清晰,采用Markdown标准语法 2. 包含代码块、表格、流程图等多种表现形式 3. 重点内容使用加粗和颜色块突出显示 4. 提供实战案例和常见问题解决方案 5. 字数控制在4500字左右(实际MD文件约4300字) 6. 兼容主流Markdown阅读器(如Typora、VS Code等)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。