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

ops/2024/11/25 8:33:57/

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.ppmy.cn/ops/136520.html

相关文章

SpringBoot多文件上传

多文件上传是在单文件上传的基础上修改而来&#xff0c;不了解单文件上传可以参考上一篇。以下在将修改部分展示如下&#xff1a; 一、修改upload.html文件&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title&g…

Selenium + 数据驱动测试:从入门到实战!

引言 在软件测试中&#xff0c;测试数据的多样性和灵活性对测试覆盖率至关重要。而数据驱动测试&#xff08;Data-Driven Testing&#xff09;通过将测试逻辑与数据分离&#xff0c;极大地提高了测试用例的可维护性和可扩展性。本文将结合Selenium这一流行的测试工具&#xff0…

计算机的错误计算(一百六十四)

摘要 探讨 MATLAB 中 函数的计算精度问题。 例1. 考虑在许多应用中出现的函数 计算 直接贴图吧&#xff1a; 从上图可知&#xff0c;MATLAB的输出为 0.999200722162641 . 然而&#xff0c;事实上&#xff0c;16位的正确结果为 0.1000000000000045e1&#xff08;ISReals…

什么是Git,有什么特点

版本控制工具Git简介 一、Git的由来 Git 是一种分布式版本控制系统&#xff0c;由 Linux 之父 Linus Torvalds 于 2005 年创建。当时&#xff0c;Linux 内核开发团队需要一个高效的版本控制系统来管理庞大的代码库。在此之前&#xff0c;他们使用的是 BitKeeper&#xff0c;这…

Dubbo源码解析-服务订阅与发现(八)

一、服务订阅与发现 服务提供者暴漏服务的时候会向注册中心注册服务信息&#xff0c;当服务消费者引入服务的时候会去订阅服务提供者信息。RegistryDirectory#subscribe public void subscribe(URL url) {setSubscribeUrl(url);consumerConfigurationListener.addNotifyListe…

SQL注入--布尔盲注--理论

布尔盲注的原理 在SQL注入时&#xff0c;我们查询的数据不会直接回显在界面上&#xff0c;且界面对正确的查询和错误的查询有不同的回显&#xff0c;我们就可以使用布尔盲注。 比如sqli-labs的第八题&#xff0c;当我们输入的查询语句是正确的时候&#xff0c;回显就是you ar…

ftdi_sio应用学习笔记 5 - SPI

目录 1. 查找设备 2. 打开设备 3. 验证 3.1 遍历设备 3.2 打开关闭设备 3.3 读flash id SPI的SCK/MOSI/MISO分别对应&#xff08;A/B)D0/D1/D2&#xff0c;其他IO作为CS。和I2C一样&#xff0c;最大支持2路MPSSE通道&#xff0c;一路MPSSE最大13路SPI。 #define FTDI_DE…

Perforce《2024游戏技术现状报告》Part3:生成式AI、版本控制、CI/CD等游戏技术的未来趋势与应用

游戏开发者一直处于创新前沿。他们的实践、工具和技术受到各行各业的广泛关注&#xff0c;正在改变着组织进行数字创作的方式。 近期&#xff0c;Perforce发布了《2024游戏技术现状报告》&#xff0c;通过收集来自游戏、媒体与娱乐、汽车和制造业等高增长行业的从业者、管理人…