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

Elasticsearch实战应用:构建高效搜索与分析平台

Elasticsearch实战应用:构建高效搜索与分析平台

在当今大数据时代,数据的量级已经达到了惊人的级别,动辄上亿甚至更多。对于这样的数据量,如何进行有效的搜索和分析成为了众多开发者和数据科学家关注的焦点。Elasticsearch(简称ES)作为一款强大的分布式搜索和分析引擎,为大数据量的搜索和分析提供了有力的支持。本文将深入探讨Elasticsearch在实战中的应用,并通过代码示例展示其强大的功能。

一、Elasticsearch简介

Elasticsearch是一个基于Lucene的搜索引擎,它提供了一个分布式多用户能力的全文搜索引擎,具有HTTP

web接口和无模式的JSON文档。Elasticsearch不仅是一个搜索引擎,还是一个强大的数据分析平台,支持复杂的聚合操作。

二、Elasticsearch实战应用案例
1. 全文搜索与高亮显示

业务场景 :某电商平台需要为用户提供高效的商品搜索功能,要求在海量数据中快速返回匹配结果,并高亮显示关键字,提升用户体验。

索引设计 :对商品名称、描述、品牌等字段进行全文索引,使用Elasticsearch的分词器(如Standard

Analyzer)处理数据,确保用户输入的关键字可以正确匹配商品信息。

搜索功能 :使用match查询类型,配合multi_match进行多个字段的搜索,确保用户查询能匹配到商品名称、描述等相关字段。

高亮显示 :使用highlight功能,在返回的结果中对匹配的关键字进行高亮处理,提升用户可读性。

实现步骤

  1. Elasticsearch环境设置

确保Elasticsearch已经安装并运行。如果尚未安装,可以通过Docker快速启动一个Elasticsearch实例:

    bash复制代码

 docker run -d --name elasticsearch -p 9200:9200 -e "discovery.type=single-node" elasticsearch:8.0.0  

然后可以通过以下URL访问Elasticsearch API:

    复制代码

 http://localhost:9200  
  1. 创建索引与映射

为商品信息创建一个索引,定义商品名称和描述的字段类型为text,并指定使用默认的分词器:

    json复制代码

 PUT /products  
  
 {  
   "mappings": {  
     "properties": {  
       "name": {  
         "type": "text"  
       },  
       "description": {  
         "type": "text"  
       },  
       "price": {  
         "type": "float"  
       }  
     }  
   }  
 }  
  1. 插入数据

向索引中插入一些商品数据:

    json复制代码

 POST /products/_doc/1  
  
 {  
   "name": "huawei mate 70",  
   "description": "mate 70 手机是搭载纯血鸿蒙NEXT 系统的第一款旗舰机",  
   "price": 6500  
 }  
    
 POST /products/_doc/2  
 {  
   "name": "huawei Mate XT非凡大师",  
   "description": "非凡大师 16GB+1TB玄黑 ULTIMATE DESIGN",  
   "price": 23999  
 }  
    
 POST /products/_doc/3  
 {  
   "name": "huawei Mate X5",  
   "description": "huawei mate x5 12GB+512GB 羽砂黑 超轻薄四曲折叠,超高清高分辨率临境双屏,超智慧灵犀通信",  
   "price": 12499  
 }  
  1. 搜索与高亮显示

使用multi_match查询来实现对商品名称和描述字段的全文搜索,并添加highlight功能:

    json复制代码

 GET /products/_search  
  
 {  
   "query": {  
     "multi_match": {  
       "query": "X5",  
       "fields": ["name", "description"]  
     }  
   },  
   "highlight": {  
     "fields": {  
       "name": {},  
       "description": {}  
     }  
   }  
 }  

Elasticsearch返回的结果中会包含高亮字段,例如:

    json复制代码

 {  
  
   "hits": {  
     "total": {  
       "value": 1,  
       "relation": "eq"  
     },  
     "hits": [  
       {  
         "_index": "products",  
         "_id": "1",  
         "_source": {  
           "name": "huawei Mate X5",  
           "description": "huawei mate x5 12GB+512GB 羽砂黑 超轻薄四曲折叠,超高清高分辨率临境双屏,超智慧灵犀通信",  
           "price": 12499  
         },  
         "highlight": {  
           "name": ["huawei <em>x5</em>"],  
           "description": ["huawei mate <em>x5</em> 12GB+512GB 羽砂黑 超轻薄四曲折叠,超高清高分辨率临境双屏,超智慧灵犀通信"]  
         }  
       }  
     ]  
   }  
 }  

从结果中可以看到,高亮部分会以 <em> 标签包裹,可以根据需求在前端使用CSS或HTML标签来调整高亮显示的样式。

2. 大数据量聚合

业务场景 :某电商平台需要对用户行为数据进行分析,统计不同时间段内的用户访问量、订单量等关键指标。

聚合策略

  1. 近似聚合 :对于大数据量的聚合操作,精确结果往往不是必须的,而近似结果通常就可以满足需求。Elasticsearch提供了近似聚合的功能,如cardinality度量。通过设置precision_threshold参数,可以控制精度和内存使用的平衡。

    json复制代码

    POST /your_index/_search

    {
    “size”: 0,
    “aggs”: {
    “unique_users”: {
    “cardinality”: {
    “field”: “user_id”,
    “precision_threshold”: 40000
    }
    }
    }
    }

  2. 分桶聚合 :分桶聚合是一种将数据分成多个桶进行处理的方法。每个桶可以包含一部分数据,并且可以对每个桶进行独立的聚合计算。在Elasticsearch中,可以使用terms聚合来实现分桶聚合。通过设置size参数,可以限制返回的桶的数量,以避免过多的计算和内存消耗。

    json复制代码

    POST /your_index/_search

    {
    “size”: 0,
    “aggs”: {
    “group_by_field”: {
    “terms”: {
    “field”: “your_field”,
    “size”: 10000,
    “shard_size”: 50000
    },
    “aggs”: {
    “average_score”: {
    “avg”: {
    “field”: “score”
    }
    }
    }
    }
    }
    }

  3. 分布式聚合 :Elasticsearch是一个分布式系统,天然支持分布式聚合。在分布式聚合中,数据被分散到多个节点上进行处理,每个节点负责处理一部分数据,并将处理结果返回给协调节点。协调节点负责将各个节点的结果合并成最终的结果返回给客户端。这种方式可以充分利用集群的计算和存储资源,提高聚合操作的效率和可扩展性。

三、总结

Elasticsearch作为一款强大的分布式搜索和分析引擎,在大数据量的搜索和分析中发挥着重要作用。通过全文搜索与高亮显示功能,可以为用户提供高效的搜索体验;通过大数据量聚合功能,可以对海量数据进行复杂的分析和总结。在实际应用中,需要根据具体的业务需求和数据量大小进行适当的调整和优化,以获得最佳的性能表现。

本文详细介绍了Elasticsearch在实战中的应用,并通过代码示例展示了其强大的功能。希望这些内容能够帮助读者更好地理解和应用Elasticsearch,构建高效搜索与分析平台。


http://www.kler.cn/a/406409.html

相关文章:

  • Linux下Intel编译器oneAPI安装和链接MKL库编译
  • WebApis学习笔记,第二节:高级语法
  • 使用redis-shake工具进行redis的数据同步
  • 【论文速读】| RobustKV:通过键值对驱逐防御大语言模型免受越狱攻击
  • Oracle 19C 安装RAC磁盘投票失败
  • AI、VR与空间计算:教育和文旅领域的数字转型力量
  • nodejs基于微信小程序的云校园的设计与实现
  • AFSim脚本学习
  • 未来已来:少儿编程竞赛聚焦物联网,激发创新潜力
  • vue3-基于element-plus实现定制化动态表单及校验
  • CentOS使用中遇到的问题及解决方法
  • java的强,软,弱,虚引用介绍以及应用
  • 提供一个集中式的数字媒体模板库,涵盖各类设计模板(如海报、视频片头、社交媒体帖子等),支持关键词、标签、风格等多维度搜索,帮助用户快速定位所需模板。
  • 【.ner core】 配置使用百度编辑器
  • JavaScript中的this指向问题
  • 容器安全检测和渗透测试工具
  • 成都栩熙酷,电商服务新选择
  • 【SQL Server】华中农业大学空间数据库实验报告 实验七 数据查询
  • 【大语言模型】ACL2024论文-13 透过分裂投票的镜头:探索法律案例结果分类中的分歧、难度和校准
  • “AI玩手机”原理揭秘:大模型驱动的移动端GUI智能体
  • 【Redis 探秘】Redis 持久化机制:RDB 与 AOF
  • 特征融合篇 | CARAFE:轻量级通用上采样算子,可提高目标检测性能
  • 设计模式在项目中有用过吗?怎么用的?
  • 数据结构 (3)线性表的概念及其抽象数据类型定义
  • go项目中比较好的实践方案
  • 【qt版本概述】