十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

elasticsearch企业应用实例-元一软件

elasticsearch企业应用实例-元一软件 这次内容详细介绍如何使用Spring Boot整合Elasticsearch并提供几个实际应用案例。内容涵盖 Elasticsearch 的基本概念、Spring Boot 整合步骤、实战应用示例以及优化建议。1、Elasticsearch 概念及作用Elasticsearch是一个基于 Apache Lucene 构建的分布式、RESTful 风格的搜索和数据分析引擎。它专门为处理大规模数据而设计提供近实时的搜索能力支持结构化、全文、地理空间等多种类型的查询。核心特性与作用包括分布式架构支持水平扩展通过分片Shard和副本Replica机制实现高可用与负载均衡。近实时搜索数据索引后几乎立即可搜适用于需要快速响应的场景。强大的全文搜索基于倒排索引支持复杂的查询、高亮显示、模糊匹配等。数据分析与聚合提供丰富的聚合功能Aggregations用于对数据进行统计和分析。多类型数据支持除了文本还能处理日志、指标、地理空间数据等。易用性与扩展性提供 RESTful API支持多种编程语言集成并拥有活跃的生态系统。Elasticsearch 广泛应用于电商搜索、日志分析、实时监控、数据可视化等领域。2、Spring Boot 整合 Elasticsearch2.1、环境准备与依赖配置在 Spring Boot 项目中首先需要在 pom.xml 中添加 Elasticsearch 相关依赖dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-elasticsearch/artifactId/dependency在 application.properties 中配置 Elasticsearch 连接信息spring.elasticsearch.rest.urishttp://localhost:9200spring.data.elasticsearch.repositories.enabledtrue如果连接 Elasticsearch 集群可以配置集群名称和节点spring.data.elasticsearch.cluster-nameyour-cluster-name spring.data.elasticsearch.cluster-nodesip1:port1,ip2:port22.2、创建 Elasticsearch 实体类使用 Document 注解定义一个实体类映射到 Elasticsearch 的索引importorg.springframework.data.annotation.Id;importorg.springframework.data.elasticsearch.annotations.Document;Document(indexNamearticles)public class Article{Id private Stringid;private String title;private String content;// 无参构造器、有参构造器、getter和setter方法 publicArticle(){}public Article(String id, String title, String content){this.idid;this.titletitle;this.contentcontent;}// Getter 和 Setter 方法 public StringgetId(){returnid;}public void setId(Stringid){this.idid;}public StringgetTitle(){returntitle;}public void setTitle(String title){this.titletitle;}public StringgetContent(){returncontent;}public void setContent(String content){this.contentcontent;}}2.3、创建 Elasticsearch Repository创建一个继承 ElasticsearchRepository 的接口用于数据操作importorg.springframework.data.elasticsearch.repository.ElasticsearchRepository;importjava.util.List;public interface ArticleRepository extends ElasticsearchRepositoryArticle, String{// 根据内容进行全文搜索 ListArticlefindByContentContaining(String content);// 根据标题搜索 ListArticlefindByTitleContaining(String title);}2.4、控制器层实现创建一个 REST 控制器来处理搜索请求importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.*;importjava.util.List;RestController RequestMapping(/api/articles)public class ArticleController{Autowired private ArticleRepository articleRepository;// 搜索文章 GetMapping(/search)public ListArticlesearchArticles(RequestParam String query){returnarticleRepository.findByContentContaining(query);}// 添加新文章 PostMapping public Article createArticle(RequestBody Article article){returnarticleRepository.save(article);}}3、Elasticsearch 实战应用案例3.1、案例一电商平台商品搜索与高亮显示业务场景电商平台需要为用户提供高效的商品搜索功能在海量数据中快速返回匹配结果并高亮显示关键字。实现步骤创建商品索引 使用 Elasticsearch 的 REST API 创建商品索引PUT /products{mappings:{properties:{name:{type:text},description:{type:text},price:{type:float}}}}添加商品数据POST /products/_doc/1{name:华为 Mate 70,description:Mate 70 手机是搭载纯血鸿蒙NEXT 系统的第一款旗舰机,price:6500}实现搜索与高亮 在 Repository 中定义复杂查询方法importorg.springframework.data.elasticsearch.annotations.Query;importjava.util.List;public interface ProductRepository extends ElasticsearchRepositoryProduct, String{Query({\multi_match\: {\query\:\?0\,\fields\: [\name\,\description\]}})ListProductfindByQuery(String query);}使用 Elasticsearch 的高亮查询Service public class ProductService{Autowired private ElasticsearchRestTemplate elasticsearchTemplate;public ListSearchHitProductsearchProductsWithHighlight(String keyword){// 创建查询条件 NativeSearchQuery searchQuerynew NativeSearchQueryBuilder().withQuery(QueryBuilders.multiMatchQuery(keyword,name,description)).withHighlightFields(new HighlightBuilder.Field(name).preTags(em).postTags(/em), new HighlightBuilder.Field(description).preTags(em).postTags(/em)).build();SearchHitsProductsearchHitselasticsearchTemplate.search(searchQuery, Product.class);returnsearchHits.getSearchHits();}}3.2、案例二日志收集与分析系统业务场景对分布式系统中的应用日志进行集中管理、实时监控与分析快速定位系统错误和性能瓶颈。解决方案使用ELK/EFK 技术栈Filebeat/Logstash收集应用日志Elasticsearch存储和索引日志数据Kibana日志可视化和监控创建日志索引实现日志分析public interface LogRepository extends ElasticsearchRepositoryAppLog, String{// 统计各日志级别的数量 Query({\aggs\: {\levels\: {\terms\: {\field\:\level.keyword\}}}})AggregatedPageAppLogcountByLevel();// 根据时间范围查询日志 ListAppLogfindByTimestampBetween(String startTime, String endTime);}3.3、案例三复杂查询与聚合分析业务场景新闻分析平台需要对大量文章进行复杂查询和内容分析例如统计特定关键词的出现频率。实现方案布尔查询 组合多个查询条件importorg.elasticsearch.index.query.QueryBuilders;importorg.elasticsearch.index.query.BoolQueryBuilder;public ListArticlecomplexSearch(String mustTerm, String shouldTerm, String mustNotTerm){BoolQueryBuilder boolQueryQueryBuilders.boolQuery().must(QueryBuilders.matchQuery(title, mustTerm)).should(QueryBuilders.matchQuery(content, shouldTerm)).mustNot(QueryBuilders.matchQuery(status, mustNotTerm));NativeSearchQuery searchQuerynew NativeSearchQueryBuilder().withQuery(boolQuery).build();returnelasticsearchTemplate.search(searchQuery, Article.class).getContent();}聚合分析 统计标签出现频率public voidtagAggregation(){TermsAggregationBuilder aggregationAggregationBuilders .terms(tags_aggregation).field(tags.keyword);NativeSearchQuery searchQuerynew NativeSearchQueryBuilder().addAggregation(aggregation).build();SearchHitsArticlesearchHitselasticsearchTemplate.search(searchQuery, Article.class);Terms termssearchHits.getAggregations().get(tags_aggregation);for(Terms.Bucket bucket:terms.getBuckets()){System.out.println(标签: bucket.getKey(), 数量: bucket.getDocCount());}}4、性能优化建议索引优化为常用字段建立合适的索引映射根据数据类型选择合适的分析器查询优化使用过滤器缓存结果限制检索范围避免全索引扫描使用分页减少返回数据量集群与分片配置根据数据量和硬件配置合理设置分片数量和副本监控节点负载避免热点数据问题批量操作 对于大量数据插入和更新使用批量操作提高效率Service public class BulkOperationService{Autowired private ElasticsearchRestTemplate elasticsearchTemplate;public void bulkInsert(ListArticlearticles){ListIndexQueryqueriesarticles.stream().map(article -new IndexQueryBuilder().withId(article.getId()).withObject(article).build()).collect(Collectors.toList());elasticsearchTemplate.bulkIndex(queries, BulkOptions.defaultOptions());}}5、总结主要介绍了 Spring Boot 与 Elasticsearch 的整合方法并通过电商搜索、日志分析和复杂查询三个实际案例展示了 Elasticsearch 的应用价值。通过合理的配置和优化Elasticsearch 能够为应用程序提供强大的搜索和数据分析能力满足大数据量下的高性能需求。Elasticsearch 的分布式特性和丰富的功能集使其成为现代应用中不可或缺的搜索和分析引擎合理利用其特性可以显著提升应用的搜索体验和数据处理能力。
返回列表