当前位置: 首页 > 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;广义表是…...

论文笔记 SliceGPT: Compress Large Language Models By Deleting Rows And Columns

欲买桂花同载酒&#xff0c;终不似&#xff0c;少年游。 数学知识 秩&#xff1a; 矩阵中最大线性无关的行/列向量数。行秩与列秩相等。 线性无关&#xff1a;对于N个向量而言&#xff0c;如果任取一个向量 v \textbf{v} v&#xff0c;不能被剩下的N-1个向量通过线性组合的方式…...

前端工具的选择和安装

选择和安装前端工具是前端开发过程中的重要步骤。现代前端开发需要一些工具来提高效率和协作能力。以下是一些常用的前端工具及其选择和安装指南。 1. 代码编辑器 选择一个好的代码编辑器可以显著提高开发效率。以下是几款流行的代码编辑器&#xff1a; Visual Studio Code (…...

Fantasy中定时器得驱动原理

一、服务器框架启动 public static async FTask Start(){// 启动ProcessStartProcess().Coroutine();await FTask.CompletedTask;while (true){ThreadScheduler.Update();Thread.Sleep(1);}} 二、主线程 Fantasy.ThreadScheduler.Update internal static void Update(){MainS…...

【反转链表】力扣 445. 两数相加 II

一、题目 二、思路 加法运算是从低位开始&#xff0c;向高位进位&#xff0c;因此需要将两个链表进行反转&#xff0c;再进行对齐后的相加操作。力扣 2. 两数相加 三、题解 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode …...

SpringBoot 项目中使用 spring-boot-starter-amqp 依赖实现 RabbitMQ

文章目录 前言1、application.yml2、RabbitMqConfig3、MqMessage4、MqMessageItem5、DirectMode6、StateConsumer&#xff1a;消费者7、InfoConsumer&#xff1a;消费者 前言 本文是工作之余的随手记&#xff0c;记录在工作期间使用 RabbitMQ 的笔记。 1、application.yml 使…...

Uniapp 安装安卓、IOS模拟器并调试

一、安装Android模拟器并调试 1. 下载并安装 Android Studio 首先下载 Mac 环境下的 Android Studio 的安装包&#xff0c;为dmg 格式。 下载完将Android Studio 向右拖拽到Applications中&#xff0c;接下来等待安装完成就OK啦&#xff01; 打开过程界面如下图所示&#xf…...

JavaScript 中的原型和原型链

JavaScript 中的原型和原型链也是一个相对较难理解透彻的知识点&#xff0c;下面结合详细例子来进行说明&#xff1a; 一、原型的概念 在 JavaScript 中&#xff0c;每个函数都有一个 prototype 属性&#xff0c;这个属性指向一个对象&#xff0c;这个对象就是所谓的 “原型对…...

数组变换(两倍)

数组变换 以最大元素为基准元素&#xff0c;判读其他元素能否通过 x 2 成为最大值&#xff01; 那么怎么判断呢&#xff1a; max % arr[i] 0arr[i] * 2 ^n max int x 2 ^ n max / arr[i] 3.只需判断 这个 x 是不是 2 的 n 次放就可以了&#xff01; 判断 是否为 2 的 n 次 …...

GBN协议、SR协议

1、回退N步&#xff08;Go-Back-N,GBN&#xff09;协议&#xff1a; 总结&#xff1a; GBN协议的特点&#xff1a; &#xff08;1&#xff09;累计确认机制&#xff1a;当发送方收到ACKn时&#xff0c;表明接收方已正确接收序号为n以及序号小于n的所有分组&#xff0c;发送窗…...

三维扫描检测仪3d扫描测量尺寸-自动蓝光测量

在现代工业及生产过程中&#xff0c;精确、高效的尺寸检测是保证产品质量、提升生产效率的关键因素。 红、蓝光测量&#xff0c;以其高精度、高效率和非接触式的特点&#xff0c;在工业及生产中发挥着越来越重要的作用。蓝光测量技术利用蓝色激光光源&#xff0c;通过扫描被测…...

泉州网站建设泉州/山东关键词优化联系电话

本周主要复习了高数&#xff0c;感觉掌握了忘的比较快&#xff0c;所以在前几天主要是看了知识点&#xff0c;以及书上的例题&#xff0c;后几天就找了一些题做&#xff0c;物理在下周五考&#xff0c;中间的时间间隔较长&#xff0c;所以准备考完高数再复习。 而且上周的模拟考…...

vb6做网站/苏州疫情最新消息

目录 UCX 的意义 UCX 通信接口简介 支持的传输(协议&#xff09; UCX社区 UCX 编程模型简介 建立连接 内存注册 异步任务处理&#xff08;重点&#xff09; 使用UCX 编译debug版本 构建RPM包 构建DEB 包 构建Doxygen文档 使用UCX安装OpenMPI和OpenSHMEM 使用UCX安…...

八大处做双眼预约网站/app开发公司排名

你还在为了Word、Excel、PDF、CAD等文档格式转换而发愁吗&#xff1f; 你是否在寻找一款能够在应用程序中文档管理的工具呢&#xff1f; Aspose——支持100多种文件格式创建、编辑、转换和打印&#xff01; 往下看&#xff0c;找一找哪款产品满足您的开发需求~ ▼▼▼▼▼ ★…...

廊坊建站模板系统/品牌推广运营策划方案

cmd下tracter //路由追踪//服务开关net start PPTVServicenet stop Spooler输入“ipconfig /release”&#xff0c;按“Enter”键&#xff0c;将释放IP地址。输入“ipconfig /renew” &#xff0c;按“Enter”键&#xff0c;将重新获取IP地址。在所在的网络中使用net view命令…...

直接在原备案号下增加新网站/营销网

有没有发现&#xff0c;最近学Python的程序员越来越多了&#xff0c;不少人开始把Python当做第一语言来学习。但结合我最近这些年Python的学习、开发经验&#xff0c;发现超90%的人在初学Python时都可能会遇到下面这些问题&#xff1a; 应用方向太多了&#xff0c;完全不知道怎…...

厦门外贸网站建设公司/西安霸屏推广

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼怎样转换下面的二维数组到一维数组&#xff0c;然后输入数字&#xff0c;然后显示出输入数字在数组中相对应的词char commonWords[13][60] {"C is a structured, procedural programming","language that has been …...