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

哔哩哔哩网站免费进入管理人员需要培训哪些课程

哔哩哔哩网站免费进入,管理人员需要培训哪些课程,怎样推广广告,做棋牌网站Spring Boot整合Elasticsearch:全文检索与聚合分析实战 https://img-blog.csdnimg.cn/direct/aa4e4a153a4d4c0d8a3e6a5c7c0e7e6e.png 引言 在大数据时代,高效的数据检索与分析能力成为现代应用的核心竞争力。Elasticsearch作为一款基于Lucene的分布式…

Spring Boot整合Elasticsearch:全文检索与聚合分析实战

https://img-blog.csdnimg.cn/direct/aa4e4a153a4d4c0d8a3e6a5c7c0e7e6e.png

引言

在大数据时代,高效的数据检索与分析能力成为现代应用的核心竞争力。Elasticsearch作为一款基于Lucene的分布式搜索与分析引擎,凭借其近实时搜索强大的聚合分析水平扩展能力,成为处理海量数据的首选方案。Spring Boot作为Java领域快速开发的标杆框架,与Elasticsearch的整合能极大提升开发效率。本文将深入探讨如何实现Spring Boot与Elasticsearch的无缝整合,并演示全文检索聚合分析的典型应用场景。


一、环境准备与依赖配置

1.1 版本选择建议

  • Spring Boot 3.x
  • Elasticsearch 8.x​(建议使用与Spring Data Elasticsearch兼容版本)
  • Java 17+

1.2 添加核心依赖

 

xml

<!-- Spring Data Elasticsearch -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency><!-- ES客户端(可选,根据部署方式选择) -->
<dependency><groupId>co.elastic.clients</groupId><artifactId>elasticsearch-java</artifactId><version>8.12.0</version>
</dependency>

1.3 配置文件

 

yaml

spring:elasticsearch:uris: http://localhost:9200  # ES服务器地址username: elastic           # 若启用安全认证password: your_passwordconnection-timeout: 5s       # 连接超时时间socket-timeout: 60s         # 请求超时时间

二、领域模型与Repository设计

2.1 定义实体类

使用@Document注解映射ES索引:

 

java

@Document(indexName = "products")
public class Product {@Idprivate String id;@Field(type = FieldType.Text, analyzer = "ik_max_word")private String name;@Field(type = FieldType.Double)private Double price;@Field(type = FieldType.Keyword)private String category;// 省略getter/setter和构造方法
}
  • @Field注解定义字段类型和分析器(如使用ik中文分词)

2.2 创建Repository接口

 

java

public interface ProductRepository extends ElasticsearchRepository<Product, String> {// 自定义方法:根据名称搜索(自动实现)List<Product> findByName(String name);// 复杂查询需使用@Query注解@Query("{\"match\": {\"name\": \"?0\"}}")List<Product> searchByNameCustom(String keyword);
}

三、全文检索实战

3.1 基础搜索

 

java

@Service
public class ProductService {@Autowiredprivate ProductRepository productRepository;// 简单匹配查询public List<Product> searchByKeyword(String keyword) {return productRepository.findByName(keyword);}// 复杂多条件查询public List<Product> advancedSearch(String keyword, Double maxPrice) {NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();// 组合查询条件queryBuilder.withQuery(QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("name", keyword)).filter(QueryBuilders.rangeQuery("price").lte(maxPrice)));// 高亮显示queryBuilder.withHighlightBuilder(new HighlightBuilder().field("name").preTags("<em>").postTags("</em>"));return elasticsearchOperations.search(queryBuilder.build(), Product.class).stream().map(searchHit -> {Product product = searchHit.getContent();// 处理高亮字段Map<String, List<String>> highlightFields = searchHit.getHighlightFields();if (highlightFields.containsKey("name")) {product.setName(highlightFields.get("name").get(0));}return product;}).collect(Collectors.toList());}
}

3.2 分页与排序

 

java

// 添加分页和排序参数
queryBuilder.withPageable(PageRequest.of(page, size, Sort.by("price").ascending()));

四、聚合分析实战

4.1 统计商品类别分布

 

java

public Map<String, Long> analyzeCategoryDistribution() {NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().addAggregation(AggregationBuilders.terms("category_agg").field("category").size(10)).build();SearchHits<Product> searchHits = elasticsearchOperations.search(searchQuery, Product.class);Terms terms = searchHits.getAggregations().get("category_agg");return terms.getBuckets().stream().collect(Collectors.toMap(Terms.Bucket::getKeyAsString, Terms.Bucket::getDocCount));
}

4.2 价格区间统计

 

java

public Map<String, Long> analyzePriceRanges() {NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().addAggregation(AggregationBuilders.range("price_ranges").field("price").addRange(0, 100).addRange(100, 500).addRange(500, 1000)).build();Range rangeAgg = elasticsearchOperations.search(searchQuery, Product.class).getAggregations().get("price_ranges");return rangeAgg.getBuckets().stream().collect(Collectors.toMap(bucket -> bucket.getFrom() + "-" + bucket.getTo(),Range.Bucket::getDocCount));
}

五、性能优化与注意事项

5.1 优化建议

  1. 索引设计:合理设置分片数和副本数
  2. 查询优化:避免深分页(使用search_after替代)
  3. 硬件配置:为ES节点分配足够的堆内存(建议不少于4GB)
  4. 分词策略:根据业务选择合适的分词器(如ik_smart vs ik_max_word)

5.2 常见问题排查

  • 版本兼容性:确保Spring Data Elasticsearch与ES服务端版本匹配
  • 连接超时:检查防火墙设置和网络连通性
  • 字段类型冲突:重建索引前需确认Mapping定义

六、典型应用场景

  1. 电商平台:商品搜索、分类统计、价格分布分析
  2. 日志分析:错误日志检索、请求趋势分析
  3. 内容平台:文章全文检索、热词统计
  4. 物联网:设备数据实时查询、时序数据分析

总结

通过Spring Boot与Elasticsearch的整合,开发者可以快速构建高效的搜索分析功能。本文从环境搭建到复杂聚合,展示了完整的实现路径。建议读者结合实际业务需求,灵活运用各种查询和聚合类型,同时持续关注ES集群的性能表现。

http://www.dtcms.com/wzjs/17372.html

相关文章:

  • 电子商务网站建设ppt模板百度投诉电话客服24小时
  • 垂直b2b网站有哪些?引擎seo优
  • 做设计的搜素材上什么网站应用商店aso优化
  • 设计网页代码流程重庆seo
  • 上海网站建设领导品牌大数据营销名词解释
  • 订做网站建设站长工具一区
  • 设计做网站网站推广的案例
  • 百度站长工具大全seo关键词排名优化方案
  • 苏州网站建设网络推广百度网站链接
  • 先做网站后备案吗网站前期推广
  • 合肥市做网站多少钱滨州seo招聘
  • 建设网站有什么法律么运营推广的方式和渠道有哪些
  • 网站建设服务费属于什么科目搜索引擎营销优化
  • 上海做网站收费免费制作网站app
  • 安徽省建设安全监督站的网站兰州网络推广公司哪家好
  • 上海网站优化推广济南seo外包公司
  • 企业网站建设电话互联网广告代理可靠吗
  • 营销型网站设计价格网络推广项目
  • 代理公司招标流程网站seo
  • 镇江网站定制宁波 seo整体优化
  • wordpress资源消耗湖南专业seo推广
  • wordpress前端上传图片优化设计方法
  • 做游戏还是做网站好网站优化的意义
  • 如何做网站浏览pdf福州seo按天收费
  • 做网站的公司怎么找外包推广服务
  • 劳务公司找项目平台seo网络排名优化哪家好
  • 深圳制作公司网站的公司怎么自己制作网页
  • 二级域名著名网站window优化大师
  • 网站建设网站建设的网络公司快速排序优化
  • 做网站的语网站怎么做到秒收录