当前位置: 首页 > news >正文

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

       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,现在就是最好的开始。

相关文章:

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

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

BEPUphysicsint定点数3D物理引擎介绍

原文:BEPUphysicsint定点数3D物理引擎介绍 - 哔哩哔哩 帧同步的游戏中如果用物理引擎,为了保证不同设备上的结果一致,需要采用定点数来计算迭代游戏过程中的物理运算。也就是我们通常说的定点数物理引擎(确定性物理引擎)。本系列教程给大家详细的讲解如…...

宠物领养平台构建:SpringBoot技术路线图

摘 要 如今社会上各行各业,都在用属于自己专用的软件来进行工作,互联网发展到这个时候,人们已经发现离不开了互联网。互联网的发展,离不开一些新的技术,而新技术的产生往往是为了解决现有问题而产生的。针对于宠物领养…...

解决Flink读取kafka主题数据无报错无数据打印的重大发现(问题已解决)

亦菲、彦祖们,今天使用idea开发的时候,运行flink程序(读取kafka主题数据)的时候,发现操作台什么数据都没有只有满屏红色日志输出,关键干嘛?一点报错都没有,一开始我觉得应该执行程序…...

python自动化测开面试题汇总(持续更新)

介绍他们测某云,底层是linux可以挂多个磁盘,有现有的接口,用python实现热插拔,查看它的功能,项目目前用到的是python,linux和虚拟云,结合你之前的项目介绍下三者(3min之内) 列表判断是否有重复元素 求1-9的…...

1-1 Gerrit实用指南

注:学习gerrit需要拥有git相关知识,如果没有学习过git请先回顾git相关知识点 黑马程序员git教程 一小时学会git git参考博客 git 实操博客 1.0 定义 Gerrit 是一个基于 Web 的代码审查系统,它使用 Git 作为底层版本控制系统。Gerrit 的主要功…...

docker如何安装redis

第一步 如果未指定redis,则安装的是最新版的 docker pull redis 创建一个目录 mkdir /usr/local/docker/redis 然后直接可以下载redis,这是方式确实不怎么好,应该找在官网上找对应的redis配置文件 wget http://download.redis.io/redis-stab…...

省级新质生产力数据(蔡湘杰版本)2012-2022年

测算方式:参考《当代经济管理》蔡湘杰(2024)老师研究的做法,本文以劳动者、劳动对象和劳动资料为准则层,从新质生产力“量的积累、质的提升、新的拓展”三维目标出发,构建新质生产力综合评价指标体系&#…...

【游资悟道】-作手新一悟道心法

作手新一经典语录节选: 乔帮主传完整版:做股票5年,炼成18式,成为A股低吸大神!从小白到大神,散户炒股的六个过程,不看不知道自己水平 围着主线做,多研究龙头,研究涨停&am…...

Diffusion中的Unet (DIMP)

针对UNet2DConditionModel模型 查看Unet的源码,得知Unet的down,mid,up blocks的类型分别是: down_block_types: Tuple[str] ("CrossAttnDownBlock2D","CrossAttnDownBlock2D","CrossAttnDownBlock2D","DownBlock2…...

编译以前项目更改在x64下面时报错:函数“PVOID GetCurrentFiber(void)”已有主体

win32下面编译成功,但是x64报错 1>GetWord.c 1>md5.c 这两个文件无法编译 1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\um\winnt.h(24125,1): error C2084: 函数“PVOID GetCurrentFiber(void)”已有主体 1>C:\Program Files (x…...

【AIGC】大模型面试高频考点-数据清洗篇

【AIGC】大模型面试高频考点-数据清洗篇 (一)常用文本清洗方法1.去除无用的符号2.去除表情符号3.文本只保留汉字4.中文繁体、简体转换5.删除 HTML 标签和特殊字符6.标记化7.小写8.停用词删除9.词干提取和词形还原10.处理缺失数据11.删除重复文本12.处理嘈…...

当测试时间与测试资源有限时,你会如何优化测试策略?

1.优先级排序:根据项目的需求和紧急程度进行优先级排序,将测试用例用例划分优先级,合理安排测试资源 和时间。这样能够保障在有限的时间内测试到最关键的功能 2.提前介入测试:在开发过程中提前进行测试,可以迅速发现问…...

基于R语言森林生态系统结构、功能与稳定性分析与可视化

在生态学研究中,森林生态系统的结构、功能与稳定性是核心研究内容之一。这些方面不仅关系到森林动态变化和物种多样性,还直接影响森林提供的生态服务功能及其应对环境变化的能力。森林生态系统的结构主要包括物种组成、树种多样性、树木的空间分布与密度…...

如何使用 Python 实现插件式架构

使用 Python 实现插件式架构可以通过动态加载和调用模块或类,构建一个易于扩展和维护的系统。以下是实现插件式架构的步骤和核心思想。 1. 插件式架构核心概念 主程序:负责加载、管理插件,并调用插件的功能。插件:独立的模块或类…...

【北京迅为】iTOP-4412全能版使用手册-第二十章 搭建和测试NFS服务器

iTOP-4412全能版采用四核Cortex-A9,主频为1.4GHz-1.6GHz,配备S5M8767 电源管理,集成USB HUB,选用高品质板对板连接器稳定可靠,大厂生产,做工精良。接口一应俱全,开发更简单,搭载全网通4G、支持WIFI、蓝牙、…...

【纯原生js】原生实现h5落地页面中的单选组件按钮及功能

h5端的按钮系统自带的一般都很丑&#xff0c;需要我们进行二次美化&#xff0c;比如单选按钮复选框之类的&#xff0c;那怎么对其进行html和css的改造&#xff1f; 实现效果 实现代码 <section id"tags"><h2>给景区添加标题</h2><label><…...

深入浅出:开发者如何快速上手Web3生态系统

Web3作为互联网的未来发展方向&#xff0c;正在逐步改变传统互联网架构&#xff0c;推动去中心化技术的发展。对于开发者而言&#xff0c;Web3代表着一个充满机遇与挑战的新领域&#xff0c;学习和掌握Web3的基本技术和工具&#xff0c;将为未来的项目开发提供强大的支持。那么…...

通过深度点图表示的隐式场实现肺树结构的高效解剖标注文献速递-生成式模型与transformer在医学影像中的应用

Title 题目 Efficient anatomical labeling of pulmonary tree structures via deeppoint-graph representation-based implicit fields 通过深度点图表示的隐式场实现肺树结构的高效解剖标注 01 文献速递介绍 近年来&#xff0c;肺部疾病&#xff08;Decramer等&#xff…...

数据结构 (17)广义表

前言 数据结构中的广义表&#xff08;Generalized List&#xff0c;又称列表Lists&#xff09;是一种重要的数据结构&#xff0c;它是对线性表的一种推广&#xff0c;放松了对表元素的原子限制&#xff0c;容许它们具有其自身的结构。 一、定义与表示 定义&#xff1a;广义表是…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看

文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

android13 app的触摸问题定位分析流程

一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

深度解析:etcd 在 Milvus 向量数据库中的关键作用

目录 &#x1f680; 深度解析&#xff1a;etcd 在 Milvus 向量数据库中的关键作用 &#x1f4a1; 什么是 etcd&#xff1f; &#x1f9e0; Milvus 架构简介 &#x1f4e6; etcd 在 Milvus 中的核心作用 &#x1f527; 实际工作流程示意 ⚠️ 如果 etcd 出现问题会怎样&am…...

前端工具库lodash与lodash-es区别详解

lodash 和 lodash-es 是同一工具库的两个不同版本&#xff0c;核心功能完全一致&#xff0c;主要区别在于模块化格式和优化方式&#xff0c;适合不同的开发环境。以下是详细对比&#xff1a; 1. 模块化格式 lodash 使用 CommonJS 模块格式&#xff08;require/module.exports&a…...

起重机起升机构的安全装置有哪些?

起重机起升机构的安全装置是保障吊装作业安全的关键部件&#xff0c;主要用于防止超载、失控、断绳等危险情况。以下是常见的安全装置及其功能和原理&#xff1a; 一、超载保护装置&#xff08;核心安全装置&#xff09; 1. 起重量限制器 功能&#xff1a;实时监测起升载荷&a…...