Elasticsearch的基础使用和高阶使用

Elasticsearch的基础使用和高阶使用

Elasticsearch是一款分布式的全文搜索和分析引擎,基于Lucene构建。它具有实时搜索、稳定、扩展性强等特点,被广泛用于日志分析、全文搜索、业务数据分析等场景。本文将深入介绍Elasticsearch的基础使用和高阶使用,包括安装配置、基本操作、高级查询、集群管理、性能优化等内容。

目录
  1. Elasticsearch概述
  2. Elasticsearch安装和配置
  3. Elasticsearch基础使用
    • 创建索引
    • 文档操作
    • 基本查询
  4. Elasticsearch高级使用
    • 高级查询
    • 聚合分析
    • 脚本查询
  5. Elasticsearch集群管理
    • 集群配置
    • 节点管理
    • 索引管理
  6. Elasticsearch性能优化
    • 索引优化
    • 查询优化
    • 资源管理
  7. 实际应用案例
  8. 总结

1. 概述

Elasticsearch 是一个开源的搜索引擎,基于Lucene库构建。它支持RESTful API,具有实时搜索能力和高扩展性,能够处理PB级别的数据量。

1.1 核心概念
  • 索引(Index):类似于数据库的概念,每个索引包含了多个文档。
  • 文档(Document):最小的可查询单位,存储实际数据。
  • 类型(Type):索引中的逻辑分类,7.x版本后已弃用。
  • 节点(Node):集群中的一个实例,存储数据并参与集群的索引和查询。
  • 集群(Cluster):由一个或多个节点组成的集合,共享同一个名字。

2. 安装和配置

2.1 安装Elasticsearch

可以在官方网站下载Elasticsearch安装包,支持多种操作系统。也可以通过Docker、Homebrew等方式安装。

  • 下载和解压

    bash 复制代码
    wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.1-linux-x86_64.tar.gz
    tar -xzf elasticsearch-7.10.1-linux-x86_64.tar.gz
    cd elasticsearch-7.10.1
  • 启动Elasticsearch

    bash 复制代码
    ./bin/elasticsearch
  • 验证安装

    打开浏览器访问http://localhost:9200,如果安装成功会返回集群的基本信息。

2.2 配置Elasticsearch

Elasticsearch的配置文件位于config/elasticsearch.yml。常用配置包括:

  • 集群名称

    yaml 复制代码
    cluster.name: my-cluster
  • 节点名称

    yaml 复制代码
    node.name: node-1
  • 数据存储路径

    yaml 复制代码
    path.data: /path/to/data
  • 日志存储路径

    yaml 复制代码
    path.logs: /path/to/logs
  • 网络配置

    yaml 复制代码
    network.host: 0.0.0.0
    http.port: 9200

3. 基础使用

3.1 创建索引

使用PUT请求创建索引:

bash 复制代码
curl -X PUT "localhost:9200/my_index?pretty"
3.2 文档操作
  • 添加文档

    bash 复制代码
    curl -X POST "localhost:9200/my_index/_doc/1?pretty" -H 'Content-Type: application/json' -d'
    {
      "name": "John Doe",
      "age": 30,
      "about": "I love to go rock climbing"
    }
    '
  • 更新文档

    bash 复制代码
    curl -X POST "localhost:9200/my_index/_update/1?pretty" -H 'Content-Type: application/json' -d'
    {
      "doc": {
        "age": 31
      }
    }
    '
  • 删除文档

    bash 复制代码
    curl -X DELETE "localhost:9200/my_index/_doc/1?pretty"
3.3 基本查询
  • 匹配查询

    bash 复制代码
    curl -X GET "localhost:9200/my_index/_search?pretty" -H 'Content-Type: application/json' -d'
    {
      "query": {
        "match": {
          "about": "rock climbing"
        }
      }
    }
    '
  • 精确查询

    bash 复制代码
    curl -X GET "localhost:9200/my_index/_search?pretty" -H 'Content-Type: application/json' -d'
    {
      "query": {
        "term": {
          "age": 31
        }
      }
    }
    '

4. 高级使用

4.1 高级查询
  • 布尔查询

    bash 复制代码
    curl -X GET "localhost:9200/my_index/_search?pretty" -H 'Content-Type: application/json' -d'
    {
      "query": {
        "bool": {
          "must": [
            { "match": { "about": "climbing" } }
          ],
          "filter": [
            { "term": { "age": 31 } }
          ]
        }
      }
    }
    '
  • 范围查询

    bash 复制代码
    curl -X GET "localhost:9200/my_index/_search?pretty" -H 'Content-Type: application/json' -d'
    {
      "query": {
        "range": {
          "age": {
            "gte": 30,
            "lte": 40
          }
        }
      }
    }
    '
4.2 聚合分析
  • 求平均值

    bash 复制代码
    curl -X GET "localhost:9200/my_index/_search?pretty" -H 'Content-Type: application/json' -d'
    {
      "aggs": {
        "average_age": {
          "avg": {
            "field": "age"
          }
        }
      },
      "size": 0
    }
    '
  • 分组统计

    bash 复制代码
    curl -X GET "localhost:9200/my_index/_search?pretty" -H 'Content-Type: application/json' -d'
    {
      "aggs": {
        "age_groups": {
          "terms": {
            "field": "age"
          }
        }
      },
      "size": 0
    }
    '
4.3 脚本查询
  • 使用脚本进行查询

    bash 复制代码
    curl -X GET "localhost:9200/my_index/_search?pretty" -H 'Content-Type: application/json' -d'
    {
      "query": {
        "script_score": {
          "query": { "match_all": {} },
          "script": {
            "source": "doc[\'age\'].value * params.factor",
            "params": { "factor": 1.2 }
          }
        }
      }
    }
    '

5. 集群管理

5.1 集群配置
  • 集群名称

    yaml 复制代码
    cluster.name: my-cluster
  • 节点名称

    yaml 复制代码
    node.name: node-1
  • 初始主节点

    yaml 复制代码
    discovery.seed_hosts: ["host1", "host2"]
    cluster.initial_master_nodes: ["node-1", "node-2"]
5.2 节点管理
  • 添加节点

    在新节点上进行相应配置,使其加入集群。

  • 移除节点

    使用API将节点从集群中移除:

    bash 复制代码
    curl -X POST "localhost:9200/_cluster/voting_config_exclusions?node_names=node-1"
5.3 索引管理
  • 查看索引状态

    bash 复制代码
    curl -X GET "localhost:9200/_cat/indices?v"
  • 关闭索引

    bash 复制代码
    curl -X POST "localhost:9200/my_index/_close"
  • 打开索引

    bash 复制代码
    curl -X POST "localhost:9200/my_index/_open"

6. 性能优化

6.1 索引优化
  • 分片和副本配置

    根据数据量合理配置分片和副本数量。

  • 使用别名

    通过别名管理索引,方便索引切换和升级。

6.2 查询优化
  • 避免深分页

使用search_afterscroll API替代深分页。

  • 缓存查询
    配置查询缓存,提高重复查询的效率。
6.3 资源管理
  • JVM内存配置

    调整JVM内存配置,确保Elasticsearch运行在最佳状态。

  • 磁盘I/O优化

    使用SSD磁盘提高I/O性能,减少延迟。

7. 实际应用案例

在实际应用中,Elasticsearch被广泛用于日志分析、全文搜索和业务数据分析。以下是几个典型案例:

7.1 日志分析

使用Elasticsearch结合Logstash和Kibana(ELK Stack)进行日志收集、处理和可视化分析,实时监控系统运行状态。

7.2 全文搜索

电商网站使用Elasticsearch实现产品搜索,通过多条件查询和过滤,提高搜索准确性和用户体验。

7.3 业务数据分析

金融行业使用Elasticsearch存储和分析交易数据,实时监控交易异常,提升风控能力。

8. 总结

通过本文的介绍,您应该对Elasticsearch的基础使用和高阶使用有了全面的了解。无论是索引管理、查询优化还是集群管理,Elasticsearch都提供了强大的功能和工具。通过合理配置和优化,您可以充分发挥Elasticsearch的潜力,为业务提供高效可靠的数据支持。

相关推荐
Java 第一深情3 小时前
零基础入门Flink,掌握基本使用方法
大数据·flink·实时计算
MXsoft6183 小时前
华为服务器(iBMC)硬件监控指标解读
大数据·运维·数据库
PersistJiao3 小时前
Spark 分布式计算中网络传输和序列化的关系(二)
大数据·网络·spark·序列化·分布式计算
九河云4 小时前
如何对AWS进行节省
大数据·云计算·aws
FreeIPCC4 小时前
谈一下开源生态对 AI人工智能大模型的促进作用
大数据·人工智能·机器人·开源
梦幻通灵4 小时前
ES分词环境实战
大数据·elasticsearch·搜索引擎
Elastic 中国社区官方博客4 小时前
Elasticsearch 中的热点以及如何使用 AutoOps 解决它们
大数据·运维·elasticsearch·搜索引擎·全文检索
天冬忘忧5 小时前
Kafka 工作流程解析:从 Broker 工作原理、节点的服役、退役、副本的生成到数据存储与读写优化
大数据·分布式·kafka
sevevty-seven6 小时前
幻读是什么?用什么隔离级别可以防止幻读
大数据·sql
ernesto_ji6 小时前
Jenkins下载安装、构建部署到linux远程启动运行
linux·servlet·jenkins