Elasticsearch实战:从搜索到数据分析的全面应用指南

news2024/11/27 11:24:01

       Elasticsearch(简称 ES)是一个强大的分布式搜索引擎和分析工具,它能够快速处理海量数据,并提供全文检索、结构化搜索、数据分析等功能。在现代系统中,它不仅是搜索的核心组件,也是数据分析的有力工具。

      本文将结合实际场景,从核心概念到高级应用,带你全面了解 Elasticsearch 的实战应用。


一、为什么选择 Elasticsearch?

      Elasticsearch 的受欢迎程度源于以下核心特性:

  1. 高性能搜索与分析
    ES 基于倒排索引(Inverted Index),支持毫秒级响应,适合海量数据场景。

  2. 分布式架构
    支持分片与副本,提供高可用性和水平扩展能力。

  3. 灵活的数据模型
    使用 JSON 文档存储,支持丰富的数据类型和动态映射。

  4. 强大的生态系统
    与 Kibana、Logstash(Elastic Stack)无缝集成,覆盖从数据采集、存储到可视化的完整链条。


二、典型应用场景

1. 全文检索

      最常见的场景是搜索引擎,如电商网站的商品搜索、博客的文章检索等。
      关键词高亮、模糊匹配、同义词扩展等功能是 ES 的强项。

2. 日志与监控

      结合 Logstash 和 Kibana,可以实现日志采集、存储和可视化,适用于分布式系统的性能监控和错误排查。

3. 实时分析

      通过 Aggregations(聚合功能),可实时分析网站流量、用户行为等数据。

4. 推荐系统

      通过向量搜索(Vector Search)和自定义打分机制,ES 能为电商、视频平台提供个性化推荐。


三、核心概念与基础操作

1. 核心概念
  • Index(索引)
    类似于数据库中的表,存储相关联的文档。

  • Document(文档)
    基本数据单元,JSON 格式存储。
    示例文档:

    {
        "title": "Elasticsearch实战指南",
        "author": "John Doe",
        "tags": ["搜索", "大数据"],
        "published_date": "2024-01-01"
    }
    
  • Shard(分片)
    索引被划分为多个分片,每个分片可以分布在不同节点上。

  • Mapping(映射)
    定义字段类型及其特性,如 text 类型用于全文搜索,keyword 类型用于精确匹配。

2. 基础操作
创建索引
PUT /library
{
  "mappings": {
    "properties": {
      "title": { "type": "text" },
      "author": { "type": "keyword" },
      "tags": { "type": "keyword" },
      "published_date": { "type": "date" }
    }
  }
}
插入文档
POST /library/_doc/1
{
  "title": "Elasticsearch入门",
  "author": "Alice",
  "tags": ["教程", "搜索"],
  "published_date": "2023-11-21"
}
搜索文档

      搜索包含“搜索”关键词的文档:

GET /library/_search
{
  "query": {
    "match": {
      "title": "搜索"
    }
  }
}
聚合分析

      统计每个作者的文档数量:

GET /library/_search
{
  "size": 0,
  "aggs": {
    "authors_count": {
      "terms": {
        "field": "author"
      }
    }
  }
}

四、高级实战应用

1. 自定义评分机制

      通过自定义脚本增强搜索相关性,例如结合用户点击数据调整权重。

GET /library/_search
{
  "query": {
    "function_score": {
      "query": { "match": { "title": "Elasticsearch" } },
      "functions": [
        {
          "field_value_factor": {
            "field": "popularity",
            "factor": 1.2,
            "modifier": "sqrt"
          }
        }
      ]
    }
  }
}
2. 实时日志分析

      采集日志数据到 Elasticsearch,使用 Kibana 可视化分析。
      示例 Logstash 配置:

input {
  file {
    path => "/var/log/app.log"
    start_position => "beginning"
  }
}
filter {
  grok {
    match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{GREEDYDATA:message}" }
  }
}
output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "logs-%{+YYYY.MM.dd}"
  }
}
3. 地理位置搜索

      通过 Geo 类型支持地理位置相关查询,例如查找附近的商家。

PUT /locations
{
  "mappings": {
    "properties": {
      "name": { "type": "text" },
      "location": { "type": "geo_point" }
    }
  }
}

      搜索距离指定位置 5 公里的商家:

GET /locations/_search
{
  "query": {
    "geo_distance": {
      "distance": "5km",
      "location": {
        "lat": 40.7128,
        "lon": -74.0060
      }
    }
  }
}

五、性能优化技巧

1. 索引设计优化
  • 使用 keyword 类型代替 text 类型存储精确值。
  • 合理设置分片数量,避免过多的小分片。
2. 查询优化
  • 使用 filter 代替 query,避免评分计算。
  • 限制返回字段(_source),减少网络传输和解析负担。
3. 数据写入优化
  • 批量写入(Bulk API)提高写入效率。
  • 使用 refresh_interval 控制刷新频率,减少写入时的索引开销。

六、案例分享:电商搜索平台

需求背景

      为某电商平台构建搜索引擎,支持商品搜索、分类过滤、价格排序,并提供个性化推荐。

实现步骤
  1. 创建索引
    定义商品的结构,包括名称、分类、价格等字段。

  2. 全文检索
    使用 match 查询实现关键词搜索,结合 highlight 返回高亮内容。

  3. 分类过滤
    使用 terms 查询实现按分类筛选。

  4. 价格排序
    在查询中指定排序字段:

    "sort": [
      { "price": "asc" }
    ]
    
  5. 个性化推荐
    使用 function_score 调整权重,优先展示用户偏好的商品。


七、总结

      Elasticsearch 在搜索和分析领域无疑是一颗闪耀的明星,其灵活的架构和强大的功能让它成为许多企业的首选工具。从简单的关键词搜索到复杂的实时分析,Elasticsearch 都能提供高效且可扩展的解决方案。

      通过实践,我们可以充分挖掘其潜力,让数据真正服务于业务价值。如果你还没有尝试过       Elasticsearch,现在就是最好的开始。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2248377.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

快速理解微服务中Gateway的概念

一.基本概念 定义: 在微服务架构中,Spring Cloud Gateway 是一个用于API网关的框架,它是一个基于 Spring Framework 的高效、可扩展的路由器和反向代理,它能够将外部请求转发到适当的微服务,并提供一些与请求处理相关…

Java【多线程】(1)进程与线程

目录 1.前言 2.正文 2.1什么是进程 2.2PCB(进程控制块) 2.2.1进程id 2.2.2内存指针 2.2.3文件描述符表 2.2.4进程状态 2.2.4.1就绪状态 2.2.4.2阻塞状态 2.2.5进程优先级 2.2.6进程上下文 2.2.7进程的记账信息 2.3CPU操作进程的方法 2.4什…

计算机毕业设计Python+大模型美食推荐系统 美食可视化 美食数据分析大屏 美食爬虫 美团爬虫 机器学习 大数据毕业设计 Django Vue.js

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

华为鸿蒙内核成为HarmonyOS NEXT流畅安全新基座

HDC2024华为重磅发布全自研操作系统内核—鸿蒙内核,鸿蒙内核替换Linux内核成为HarmonyOS NEXT稳定流畅新基座。鸿蒙内核具备更弹性、更流畅、更安全三大特征,性能超越Linux内核10.7%。 鸿蒙内核更弹性:元OS架构,性能安全双收益 万…

kafka生产者和消费者命令的使用

kafka-console-producer.sh 生产数据 # 发送信息 指定topic即可 kafka-console-producer.sh \ --bootstrap-server bigdata01:9092 \ --topic topicA # 主题# 进程 29124 ConsoleProducer kafka-console-consumer.sh 消费数据 # 消费数据 kafka-console-consumer.sh \ --boo…

构造函数的相关

文章目录 一、构造函数 今天我们要来讲解类的默认成员函数之一的构造函数。 一、构造函数 构造函数是特殊的成员函数,需要注意的是,构造函数虽然名称叫构造,但是构造函数的主要任务并不是开空间创建对象(我们常使用的局部对象是栈帧创建时&…

云服务器部署WebSocket项目

WebSocket是一种在单个TCP连接上进行全双工通信的协议,其设计的目的是在Web浏览器和Web服务器之间进行实时通信(实时Web) WebSocket协议的优点包括: 1. 更高效的网络利用率:与HTTP相比,WebSocket的握手只…

计算机网络八股整理(一)

计算机网络八股文整理 一:网络模型 1:网络osi模型和tcp/ip模型分别介绍一下 osi模型是国际标准的网络模型,它由七层组成,从上到下分别是:应用层,表示层,会话层,传输层,…

【Qt】控件7

1.QTextEdit的简单使用 使用简单的QTextEdit,获取到的内容显示到标签上 使用textChanged信号 在槽函数中需要获取QTextEdit的内容,对应操作是: QString curorui->textEdit->toPlainText();然后显示到标签上,对应操作是: …

【博主推荐】C#的winfrom应用中datagridview常见问题及解决方案汇总

文章目录 1.datagridview绘制出现鼠标悬浮数据变空白2.datagridview在每列前动态添加序号2.1 加载数据集完成后绘制序号2.2 RowPostPaint事件绘制 3.datagridview改变行样式4.datagridview后台修改指定列数据5.datagridview固定某个列宽6.datagridview某个列的显示隐藏7.datagr…

AI智能体崛起:从“工具”到“助手”的进化之路

目录 AI智能体的崛起 AI智能体的定义与决策模型 AI智能体的特点与优势 AI智能体的应用与类型 面临的挑战 未来展望 近年来,人工智能领域的焦点正从传统的聊天机器人(Chat Bot)快速转向更具潜力的AI智能体(AI Agent&#xff…

【计网】自定义协议与序列化(一) —— Socket封装于服务器端改写

🌎 应用层自定义协议与序列化 文章目录: Tcp协议Socket编程 应用层简介 序列化和反序列化       重新理解read/write/recv/send及tcp的全双工       Socket封装       服务器端改写 🚀应用层简介 我们程序员写的一个个解决…

鸿蒙动画开发07——粒子动画

1、概 述 粒子动画是在一定范围内随机生成的大量粒子产生运动而组成的动画。 动画元素是一个个粒子,这些粒子可以是圆点、图片。我们可以通过对粒子在颜色、透明度、大小、速度、加速度、自旋角度等维度变化做动画,来营造一种氛围感,比如下…

C语言学习 12(指针学习1)

一.内存和地址 1.内存 在讲内存和地址之前,我们想有个⽣活中的案例: 假设有⼀栋宿舍楼,把你放在楼⾥,楼上有100个房间,但是房间没有编号,你的⼀个朋友来找你玩,如果想找到你,就得挨…

【pyspark学习从入门到精通19】机器学习库_2

目录 估计器 分类 回归 聚类 管道 估计器 估计器可以被看作是需要估算的统计模型,以便对您的观测值进行预测或分类。 如果从抽象的 Estimator 类派生,新模型必须实现 .fit(...) 方法,该方法根据在 DataFrame 中找到的数据以及一些默认或…

结构方程模型(SEM)入门到精通:lavaan VS piecewiseSEM、全局估计/局域估计;潜变量分析、复合变量分析、贝叶斯SEM在生态学领域应用

目录 第一章 夯实基础 R/Rstudio简介及入门 第二章 结构方程模型(SEM)介绍 第三章 R语言SEM分析入门:lavaan VS piecewiseSEM 第四章 SEM全局估计(lavaan)在生态学领域高阶应用 第五章 SEM潜变量分析在生态学领域…

JQuery -- 第九课

文章目录 前言一、JQuery是什么?二、JQuery的使用步骤1.引入2.书写位置3. 表示方法 三、JQuery选择器1.层级选择器2. 筛选选择器3. 排他思想4. 精品展示 四、jQuery样式操作1. 修改样式2.类操作1. 添加2. 移除3. 切换 五、jQuery动画1. 显示和隐藏2. 滑动1. slide2.…

无人机探测:光电侦测核心技术算法详解!

核心技术 双光谱探测跟踪: 可见光成像技术:利用无人机表面反射的自然光或主动光源照射下的反射光,通过高灵敏度相机捕捉图像。该技术适用于日间晴朗天气下的无人机探测,具有直观、易于识别目标的特点。 红外成像技术&#xff1…

Java使用replaceAll替换时不使用正则表达式

前言 public String replaceAll(String regex, String replacement) {return Pattern.compile(regex).matcher(this).replaceAll(replacement);}在使用String.replaceAll() 方法时,由于入参时regex ,而入参刚好是正则表达式的字符该怎么办?我…

计算机毕业设计Hadoop+Spark音乐推荐系统 音乐预测系统 音乐可视化大屏 音乐爬虫 HDFS hive数据仓库 机器学习 深度学习 大数据毕业设计

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…