Elasticsearch的用法

Elasticsearch 是一款功能强大的分布式搜索与分析引擎,广泛应用于全文检索、日志分析、实时监控等场景。以下是其核心用法及操作指南:


一、基础概念与安装配置

    1. 核心概念
    • 索引(Index):类似数据库中的表,存储结构化或非结构化数据,支持分片(Shard)和副本(Replica)机制以提高扩展性和容灾性。

    • 网页(Document):以 JSON 格式存储的单条数据记录,通过唯一 ID 标识。

    • 映射(Mapping) :定义字段类型(如 textkeyworddate)及分词规则,优化搜索性能。

    1. 安装与启动
    • • 下载并解压 Elasticsearch,修改配置文件 elasticsearch.yml(如集群名称、节点名称)。

    • • 通过命令行启动服务:./bin/elasticsearch,默认端口为 9200


二、网页操作

    1. 新增网页
    • • 指定 ID 插入:

      复制代码
      POST /my_index/_doc/1
      {
        "title": "Elasticsearch 教程",
        "content": "基于 Lucene 的搜索服务器..."
      }
    • • 自动生成 ID:

      复制代码
      POST /my_index/_doc
      {
        "title": "另一篇教程"
      }
    1. 查询网页
    • • 按 ID 查询:

      复制代码
      GET /my_index/_doc/1
    • • 条件查询(如范围、模糊匹配):

      复制代码
      GET /my_index/_search
      {
        "query": {
          "range": {"price": {"gte": 100, "lte": 500}},
          "wildcard": {"title": "*Elastic*"}
        }
      }
    1. 更新与删除
    • • 更新部分字段:

      复制代码
      POST /my_index/_update/1
      {
        "doc": {"title": "更新后的标题"}
      }
    • • 批量操作:

      复制代码
      POST /my_index/_bulk
      {"index": {}} {"title": "网页1"} {"index": {}} {"title": "网页2"}

三、搜索与查询

    1. 全文检索
    • • 使用 match查询分词后的文本内容:

      复制代码
      GET /my_index/_search
      {
        "query": {"match": {"content": "Elasticsearch 教程"}}
      }
    • • 精确匹配使用 term查询(适用于 keyword类型字段):

      复制代码
      {"term": {"status": "active"}}
    1. 复杂查询
    • • 布尔组合查询(mustshouldmust_not):

      复制代码
      {"bool": {"must": [{"match": {"title": "Elasticsearch"}}, {"range": {"date": {"gte": "2025-01-01"}}}]}}
    • • 多字段查询(multi_match):

      复制代码
      {"multi_match": {"query": "搜索词", "fields": ["title", "content"]}}
    1. 高亮与排序
    • • 高亮匹配关键词:

      复制代码
      {"highlight": {"fields": {"content": {}}}}
    • • 按字段排序:

      复制代码
      {"sort": [{"price": {"order": "desc"}}]}

四、聚合分析

    1. **桶聚合(Bucket Aggregations)**​
    • • 按字段值分组(如统计不同年龄的用户数):

      复制代码
      {"aggs": {"ages": {"terms": {"field": "age"}}}}
    1. **度量聚合(Metric Aggregations)**​
    • • 计算平均值、总和等:

      复制代码
      {"aggs": {"avg_price": {"avg": {"field": "price"}}}}
    1. 嵌套聚合
    • • 在桶聚合内嵌套度量聚合(如每个性别下的平均收入):

      复制代码
      {"aggs": {"genders": {"terms": {"field": "gender"}}, "avg_income": {"avg": {"field": "income"}}}}

五、索引管理与优化

    1. 映射优化
    • • 动态映射与静态映射结合,避免字段类型错误:

      复制代码
      PUT /my_index
      {
        "mappings": {"properties": {"price": {"type": "double"}}}
      }
    1. 分片与副本调整
    • • 创建索引时指定分片数和副本数:

      复制代码
      {"settings": {"number_of_shards": 3, "number_of_replicas": 1}}
    1. 索引迁移与重建
    • • 使用 _reindexAPI 迁移数据:

      复制代码
      POST /_reindex
      {"source": {"index": "old_index"}, "dest": {"index": "new_index"}}

六、集群管理与监控

    1. 集群健康检查
    • • 查看集群状态:

      复制代码
      GET /_cluster/health?pretty
    1. 节点与分片监控
    • • 通过 GET _cat/shards?v查看分片分布,优化资源分配。
    1. 安全配置
    • • 启用身份验证(如 X-Pack)及 HTTPS 加密。

七、进阶技巧

  • 分词器配置:使用 IK 分词器处理中文文本,支持自定义词典和停用词。

  • 别名操作:动态切换索引别名以实现无缝索引更新:

    复制代码
    POST /_aliases {"actions": [{"remove": {"index": "old", "alias": "alias"}}, {"add": {"index": "new", "alias": "alias"}}]}
  • 脚本更新:通过 Painless 脚本批量修改字段值。


以上为 Elasticsearch 的核心用法,实际应用中需结合具体场景调整索引策略、查询逻辑及性能优化方案。更多细节可参考官方网页或搜索结果中的实战案例。

相关推荐
senijusene25 分钟前
Linux软件编程: Linux 操作系统基础与shell脚本
linux·运维·chrome
乾元42 分钟前
身份与访问:行为生物识别(按键习惯、移动轨迹)的 AI 建模
运维·网络·人工智能·深度学习·安全·自动化·安全架构
ghostwritten1 小时前
春节前夕,运维的「年关」:用 Kubeowler 给集群做一次「年终体检」
运维·云原生·kubernetes
馨谙1 小时前
Ansible模块化Playbook管理:静态导入与动态包含详解
运维·ansible
聆风吟º6 小时前
CANN开源项目深度实践:基于amct-toolkit实现自动化模型量化与精度保障策略
运维·开源·自动化·cann
较劲男子汉9 小时前
CANN Runtime零拷贝传输技术源码实战 彻底打通Host与Device的数据传输壁垒
运维·服务器·数据库·cann
风流倜傥唐伯虎10 小时前
Spring Boot Jar包生产级启停脚本
java·运维·spring boot
Doro再努力10 小时前
【Linux操作系统10】Makefile深度解析:从依赖推导到有效编译
android·linux·运维·服务器·编辑器·vim
senijusene10 小时前
Linux软件编程:IO编程,标准IO(1)
linux·运维·服务器
忧郁的橙子.10 小时前
02-本地部署Ollama、Python
linux·运维·服务器