首页 > 其他分享 >Elasticsearch 实战应用详解

Elasticsearch 实战应用详解

时间:2024-09-25 16:51:45浏览次数:9  
标签:实战 index 9200 详解 Elasticsearch pretty my localhost

Elasticsearch 是一个分布式搜索和分析引擎,广泛应用于各种场景,如全文搜索、日志与事件数据分析、实时数据流处理等。本文将详细介绍如何在实际项目中使用 Elasticsearch,包括安装配置、基本操作、高级查询及优化策略。

1. 安装和配置

安装 Elasticsearch

通过官方包管理器安装

  • Debian/Ubuntu:

    wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
    sudo apt-get install apt-transport-https
    echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
    sudo apt-get update && sudo apt-get install elasticsearch
  • CentOS/RHEL:

    rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
    cat <<EOF | sudo tee /etc/yum.repos.d/elasticsearch.repo
    [elasticsearch-7.x]
    name=Elasticsearch repository for 7.x packages
    baseurl=https://artifacts.elastic.co/packages/7.x/yum
    gpgcheck=1
    gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
    enabled=1
    autorefresh=1
    type=rpm-md
    EOF
    sudo yum install elasticsearch

配置 Elasticsearch

打开配置文件 elasticsearch.yml 进行基本配置:

# 网络设置
network.host: 0.0.0.0
http.port: 9200

# 集群名称
cluster.name: my-cluster

# 节点名称
node.name: node-1

# 数据和日志路径
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch

启动 Elasticsearch 服务:

sudo systemctl start elasticsearch
sudo systemctl enable elasticsearch

2. 基本操作

创建索引

创建一个名为 my_index 的索引:

curl -X PUT "localhost:9200/my_index?pretty"

插入文档

向索引中插入一条文档:

curl -X POST "localhost:9200/my_index/_doc/1?pretty" -H 'Content-Type: application/json' -d'
{
  "title": "Elasticsearch实战指南",
  "author": "John Doe",
  "content": "这是一本关于Elasticsearch的实战指南。",
  "tags": ["Elasticsearch", "实战指南"],
  "published_date": "2023-10-20"
}
'

获取文档

获取插入的文档:

curl -X GET "localhost:9200/my_index/_doc/1?pretty"

更新文档

更新文档内容:

curl -X POST "localhost:9200/my_index/_update/1?pretty" -H 'Content-Type: application/json' -d'
{
  "doc": {
    "author": "Jane Doe"
  }
}
'

删除文档

删除文档:

curl -X DELETE "localhost:9200/my_index/_doc/1?pretty"

3. 高级查询

基本查询

匹配查询

curl -X GET "localhost:9200/my_index/_search?pretty" -H 'Content-Type: application/json' -d'
{
  "query": {
    "match": {
      "content": "指南"
    }
  }
}
'

复合查询

curl -X GET "localhost:9200/my_index/_search?pretty" -H 'Content-Type: application/json' -d'
{
  "query": {
    "bool": {
      "must": [
        { "match": { "content": "指南" }},
        { "match": { "author": "Jane Doe" }}
      ],
      "filter": [
        { "term": { "tags": "Elasticsearch" }}
      ]
    }
  }
}
'

聚合查询

统计文档数量

curl -X GET "localhost:9200/my_index/_count?pretty"

分组聚合

curl -X GET "localhost:9200/my_index/_search?pretty" -H 'Content-Type: application/json' -d'
{
  "aggs": {
    "tags_count": {
      "terms": {
        "field": "tags.keyword"
      }
    }
  }
}
'

分页查询

curl -X GET "localhost:9200/my_index/_search?pretty" -H 'Content-Type: application/json' -d'
{
  "from": 0,
  "size": 10,
  "query": {
    "match_all": {}
  }
}
'

4. 性能优化

索引优化

  • 合理的索引分片和副本设置

    index.number_of_shards: 3
    index.number_of_replicas: 1
  • 使用合适的映射类型

    curl -X PUT "localhost:9200/my_index?pretty" -H 'Content-Type: application/json' -d'
    {
      "mappings": {
        "properties": {
          "title": { "type": "text" },
          "author": { "type": "keyword" },
          "content": { "type": "text" },
          "tags": { "type": "keyword" },
          "published_date": { "type": "date" }
        }
      }
    }
    '

查询优化

  • 使用过滤和缓存

    在查询中使用 filter 而非 query 来提高性能,因为过滤条件可以被缓存。
    curl -X GET "localhost:9200/my_index/_search?pretty" -H 'Content-Type: application/json' -d'
    {
      "query": {
        "bool": {
          "must": {
            "match": { "content": "指南" }
          },
          "filter": {
            "term": { "tags": "Elasticsearch" }
          }
        }
      }
    }
    '

  • 避免大量的深度分页

    深度分页会降低性能,尽量避免使用过大的 from 和 size 参数,使用 search_after 或 scroll API 进行大数据量查询。
    curl -X GET "localhost:9200/my_index/_search?pretty" -H 'Content-Type: application/json' -d'
    {
      "size": 1000,
      "query": {
        "match_all": {}
      }
    }
    '

监控和维护

  • 使用Kibana监控Elasticsearch集群

       Kibana是Elasticsearch的可视化工具,能够实时监控集群状态、性能指标及日志。

  • 定期进行索引模板和映射管理

       制定索引模板和映射规范,确保新创建的索引符合性能最佳实践。

结语

通过本文,我们详细介绍了 Elasticsearch 的安装配置、基本操作、高级查询以及优化策略。在实际项目中,Elasticsearch 是一个强大的工具,能够处理海量数据,并提供高效的搜索和分析功能。希望这篇文章能帮助你更好地理解和使用 Elasticsearch,解决实际应用中的问题。

无论是日志分析、全文搜索还是实时数据处理,Elasticsearch 都可以为你提供强大的支持。掌握其使用和优化技巧,将助你在数据驱动的世界中游刃有余。

标签:实战,index,9200,详解,Elasticsearch,pretty,my,localhost
From: https://blog.csdn.net/sorrty00/article/details/142527102

相关文章

  • 大数据-137 - ClickHouse 集群 表引擎详解2 - MergeTree 存储结构 一级索引 跳数索引
    点一下关注吧!!!非常感谢!!持续更新!!!目前已经更新到了:Hadoop(已更完)HDFS(已更完)MapReduce(已更完)Hive(已更完)Flume(已更完)Sqoop(已更完)Zookeeper(已更完)HBase(已更完)Redis(已更完)Kafka(已更完)Spark(已更完)Flink(已更完)ClickHouse(正在更新···)章节内容上节我们完成了如下的内容:表引擎详解介绍日志......
  • 【Elasticsearch系列七】索引 crud
    ......
  • 【Elasticsearch系列十三】Elastic Stack
    ......
  • 大数据-139 - ClickHouse 集群 表引擎详解4 - MergeTree 实测案例 ReplacingMergeTree
    点一下关注吧!!!非常感谢!!持续更新!!!目前已经更新到了:Hadoop(已更完)HDFS(已更完)MapReduce(已更完)Hive(已更完)Flume(已更完)Sqoop(已更完)Zookeeper(已更完)HBase(已更完)Redis(已更完)Kafka(已更完)Spark(已更完)Flink(已更完)ClickHouse(正在更新···)章节内容上节我们完成了如下的内容:MergeTree存储结构Me......
  • YOLOv8实战和matlab建模:检测监控站视频的车流量、速度、车辆时间占用率以及预估拥堵模
            我们得到了某监控点的检测视频数据,需要从数据当中得到车流量、速度、车辆时间占用率等基本数据然后用于车道推测拥堵。以某一路段内检测点为例利用YOLOv8实战检验。假设:车辆只有轿车与卡车两种类型并分别设置车长;某路段只检测双车道并且应急车道不开放;YOLOv8......
  • 03.Java方法详解
    1.何谓方法?Java方法是语句的集合,在一起执行一个功能方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序中被创建,在其他地方被引用设计方法的原则:一个方法只完成1个功能,有利于后期扩展定义:类似c++里的函数,是一段用来完成特定功能的代码片段,一般定义......
  • Latex 配置代码详解
    引言参考视频:发SCI必备的【LaTex】使用教程(第二期)1.设置Vscode编辑器格式配置代码决定了如何在Vscode中编译Latex代码。//当设置为"never"时,禁用了保存LaTeX文档时自动编译的功能。"latex-workshop.latex.autoBuild.run":"never",//启用VSCode编辑器......
  • connect timed out 详解及排查
    在HTTP通信中,超时(timeout)机制用于限制客户端等待服务器响应的时间,避免因网络、服务器问题导致客户端长时间等待。超时的类型多种多样,每种类型的超时都会有对应的错误信息。以下是常见的ConnectTimeout问题的原因排查和解决方案。HTTP中的各种Timeout详解及对应的错误信息......
  • .net 到底行不行!2000 人在线的客服系统真实屏录演示(附技术详解)
    业余时间用.net写了一个免费的在线客服系统:升讯威在线客服与营销系统。时常有朋友问我性能方面的问题,正好有一个真实客户,在线的访客数量达到了2000人。在争得客户同意后,我录了一个视频。升讯威在线客服系统可以在极低配置的服务器环境下,轻松应对这种情况,依然可以做到:消息毫......
  • ElasticSearch安装分词器与整合SpringBoot
    ElasticSearch安装分词器与整合SpringBoot如果还没安装的点击安装ElasticSearch查看怎么安装分词器1.分词器在Elasticsearch中,分词器(Tokenizer)是分析器(Analyzer)的一部分,它的主要职责是将文本输入(如字符串)分割成一系列的词元(tokens)。这些词元是搜索和索引的基础单元。......