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,构建高效搜索与分析平台。

相关推荐
Wnq1007238 分钟前
养猪场巡检机器人的设计与应用研究
大数据·人工智能·数据挖掘·机器人·巡检机器人·北京玉麟科技巡检机器人
StarRocks_labs9 小时前
从InfluxDB到StarRocks:Grab实现Spark监控平台10倍性能提升
大数据·数据库·starrocks·分布式·spark·iris·物化视图
若兰幽竹10 小时前
【Spark分析HBase数据】Spark读取并分析HBase数据
大数据·spark·hbase
R²AIN SUITE10 小时前
金融合规革命:R²AIN SUITE 如何重塑银行业务智能
大数据·人工智能
绿算技术11 小时前
“强强联手,智启未来”凯创未来与绿算技术共筑高端智能家居及智能照明领域新生态
大数据·人工智能·智能家居
只因只因爆12 小时前
spark的缓存
大数据·缓存·spark
Leo.yuan13 小时前
3D 数据可视化系统是什么?具体应用在哪方面?
大数据·数据库·3d·信息可视化·数据分析
只因只因爆13 小时前
spark小任务
大数据·分布式·spark
cainiao08060514 小时前
Java 大视界——Java 大数据在智慧交通智能停车诱导系统中的数据融合与实时更新
java·大数据·开发语言
End92816 小时前
Spark之搭建Yarn模式
大数据·分布式·spark