Elasticsearch

Elasticsearch

Elasticsearch 是一款开源的分布式搜索引擎,专为全文搜索、结构化数据搜索和分析而设计。它属于 NoSQL 数据库范畴,但其主要用途是搜索和分析大规模的文本和数据。Elasticsearch 具有高扩展性、实时搜索和分布式架构等特点,被广泛应用于日志分析、搜索引擎、推荐系统等场景。

以下是 Elasticsearch 从安装到开发的全流程总结,适用于 CentOS 7 服务器和本地开发环境。


一、Elasticsearch 概述

1. 特性:

  • 全文搜索:能够在海量文档中进行快速的全文搜索。
  • 分布式架构:内置分片和副本机制,可以轻松扩展到数千个节点。
  • 实时分析:通过 Kibana、Logstash 等工具进行实时的数据分析。
  • 多租户支持:可以处理多种类型的数据,并针对不同的数据类型进行索引和查询。

2. 典型使用场景:

  • 日志分析:通过 Elasticsearch、Logstash 和 Kibana(即 ELK Stack)构建实时日志分析平台。
  • 全文检索:在大型文档集内进行关键词搜索,如电子商务网站的产品搜索。
  • 监控与报警:与 Beats 或其他数据采集工具结合,用于监控系统的各类指标数据并触发报警。

二、Elasticsearch 安装(CentOS 7)

1. 添加 Elasticsearch 仓库

首先,确保 CentOS 7 已经安装 wget,并添加 Elasticsearch 的 yum 源。

bash 复制代码
sudo yum install -y wget
sudo wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.0-x86_64.rpm
sudo rpm --install elasticsearch-7.10.0-x86_64.rpm

2. 配置 Elasticsearch

Elasticsearch 的配置文件位于 /etc/elasticsearch/elasticsearch.yml,你可以通过编辑该文件进行设置:

bash 复制代码
sudo vi /etc/elasticsearch/elasticsearch.yml

一些重要的配置项:

  • 集群名称 :定义集群的名字,如 cluster.name: my-cluster
  • 节点名称 :配置节点的名称,如 node.name: node-1
  • 网络绑定 :配置 Elasticsearch 可以监听的地址,如 network.host: 0.0.0.0 以允许外部访问。

3. 启动和设置自启

bash 复制代码
sudo systemctl start elasticsearch
sudo systemctl enable elasticsearch

4. 验证 Elasticsearch 运行状态

你可以通过 HTTP 请求验证 Elasticsearch 是否成功启动:

bash 复制代码
curl -X GET "localhost:9200/"

若一切正常,将返回 Elasticsearch 的基本信息,如版本号等。


三、Elasticsearch 核心概念

1. 索引(Index)

  • Elasticsearch 中的数据存储在索引(类似于关系型数据库中的数据库)中。
  • 每个索引都有多个文档 ,并且每个文档都有一组字段,类似于关系型数据库的表和行。

2. 文档(Document)

  • 文档是 Elasticsearch 中最基本的数据单位,每个文档可以理解为一条 JSON 格式的数据。

3. 分片与副本(Shard & Replica)

  • 分片:数据被水平切分到多个分片中,使得 Elasticsearch 能够水平扩展。
  • 副本:每个分片有多个副本,以确保数据的高可用性。

四、Elasticsearch 开发使用

1. 插入数据(Indexing)

可以通过 POST 请求将文档插入 Elasticsearch 索引。

bash 复制代码
curl -X POST "localhost:9200/my_index/_doc/1" -H 'Content-Type: application/json' -d'
{
  "name": "Alice",
  "age": 30,
  "city": "New York"
}'

该命令会在 my_index 索引中插入一条文档,ID 为 1。

2. 查询数据(Searching)

使用 GET 请求来查询数据。

  • 简单查询

    bash 复制代码
    curl -X GET "localhost:9200/my_index/_search?q=name:Alice"
  • 复杂查询

    使用 POST 请求可以进行更复杂的查询,如多字段匹配:

    bash 复制代码
    curl -X POST "localhost:9200/my_index/_search" -H 'Content-Type: application/json' -d'
    {
      "query": {
        "bool": {
          "must": [
            { "match": { "name": "Alice" } },
            { "range": { "age": { "gte": 25 } } }
          ]
        }
      }
    }'

3. 更新数据(Updating)

使用 POST 请求可以更新已有文档中的数据。

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

4. 删除数据(Deleting)

使用 DELETE 请求可以删除索引或文档。

  • 删除文档:

    bash 复制代码
    curl -X DELETE "localhost:9200/my_index/_doc/1"
  • 删除整个索引:

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

五、Elasticsearch 高级操作

1. 索引映射(Index Mapping)

在 Elasticsearch 中,映射(mapping)定义了字段的数据类型以及如何处理这些字段。例如,可以将 age 字段设置为整数类型。

bash 复制代码
curl -X PUT "localhost:9200/my_index" -H 'Content-Type: application/json' -d'
{
  "mappings": {
    "properties": {
      "name": { "type": "text" },
      "age": { "type": "integer" },
      "city": { "type": "keyword" }
    }
  }
}'

2. 聚合查询(Aggregation)

Elasticsearch 强大的聚合功能允许对数据进行分组和统计。以下示例展示了按城市进行分组,并计算每个城市的用户数量。

bash 复制代码
curl -X POST "localhost:9200/my_index/_search" -H 'Content-Type: application/json' -d'
{
  "size": 0,
  "aggs": {
    "group_by_city": {
      "terms": { "field": "city.keyword" }
    }
  }
}'

3. 分片与集群管理

在生产环境中,Elasticsearch 通常运行在集群模式下,多个节点组成集群。通过分片和副本配置,可以管理和扩展集群容量。

  • 查看分片状态:

    bash 复制代码
    curl -X GET "localhost:9200/_cat/shards"
  • 动态调整副本数:

    bash 复制代码
    curl -X PUT "localhost:9200/my_index/_settings" -H 'Content-Type: application/json' -d'
    {
      "index": {
        "number_of_replicas": 2
      }
    }'

六、Elasticsearch 可视化工具:Kibana

为了更方便地管理和分析 Elasticsearch 中的数据,可以使用 Kibana,它是 Elastic Stack 的一部分,主要用于数据可视化。

1. 安装 Kibana

bash 复制代码
sudo yum install kibana -y
sudo systemctl start kibana
sudo systemctl enable kibana

Kibana 启动后,默认通过 http://localhost:5601 访问。你可以通过 Kibana 的图形界面来进行数据分析和可视化。


七、总结

  1. Elasticsearch 是一种非常适合全文搜索和实时数据分析的分布式搜索引擎,特别适合处理大规模的非结构化数据。
  2. 它支持分布式架构实时搜索高扩展性等特点,是构建搜索引擎和日志分析系统的理想选择。
  3. 通过结合 KibanaLogstash 等工具,能够轻松构建一个功能强大的数据处理与分析平台。
相关推荐
Elasticsearch2 小时前
如何通过 Claude Code 来写入 CSV 数据到 Elasticsearch
elasticsearch
大志哥1232 天前
ES和Logstash日志链路系统上线后遭遇切片爆炸(解决)
大数据·elasticsearch
TableRow2 天前
参数化搜索的实现原理:从多维索引到查询优化
elasticsearch·全文检索
醉颜凉2 天前
Elasticsearch高性能优化:Bulk API大规模数据导入性能调优全攻略
elasticsearch·性能优化·jenkins
Ysouy2 天前
Spring Data Elasticsearch 全流程学习教程
java·spring·elasticsearch
沪飘大军2 天前
goldRush-专门分析黄金的投资理财agent
java·开发语言·elasticsearch
让学习成为一种生活方式2 天前
samblaster v.0.1.26安装与使用--生信工具096
大数据·elasticsearch·搜索引擎
小马爱打代码2 天前
Elasticsearch 容器化部署(单机版):从零搭建你的搜索和分析引擎
elasticsearch
西敏寺的乐章2 天前
排序三阶段:粗排→精排→重排,把业务信号灌进 ES 排序管道
elasticsearch·搜索引擎
小马爱打代码2 天前
Elasticsearch 集群容器化部署:构建 PB 级搜索与分析平台
大数据·elasticsearch·搜索引擎