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 等工具,能够轻松构建一个功能强大的数据处理与分析平台。
相关推荐
Elastic 中国社区官方博客1 天前
用 Elasticsearch 构建一个 ChatGPT connector 来查询 GitHub issues
大数据·人工智能·elasticsearch·搜索引擎·chatgpt·github·全文检索
武子康1 天前
大数据-172 Elasticsearch 索引操作与 IK 分词器落地实战:7.3/8.15 全流程速查
大数据·后端·elasticsearch
Elasticsearch1 天前
Elastic 与 Accenture 在 GenAI 数据准备方面的合作
elasticsearch
Elastic 中国社区官方博客1 天前
Elasticsearch:在隔离环境中安装 ELSER 模型
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
Dxy12393102161 天前
Elasticsearch删除数据介绍
大数据·elasticsearch·搜索引擎
泻水置平地1 天前
Docker下安装ES和kibana详细教程
elasticsearch·docker·容器
Wang's Blog1 天前
Elastic Stack梳理:深度解析Elasticsearch分布式查询机制与相关性算分优化实践
分布式·elasticsearch
yumgpkpm1 天前
腾讯TBDS和CMP(Cloud Data AI Platform,类Cloudera CDP,如华为鲲鹏 ARM 版)比较的缺陷在哪里?
hive·hadoop·elasticsearch·zookeeper·oracle·kafka·hbase
Elasticsearch1 天前
Elasticsearch:专用向量数据库很快就会被遗忘,事实上它从未流行过
elasticsearch
Elasticsearch1 天前
ES|QL 在 9.2:智能查找连接和时间序列支持
elasticsearch