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

哔哩哔哩网站免费进入优化防疫政策

哔哩哔哩网站免费进入,优化防疫政策,自适应网页和响应式网页区别,wordpress网站怎么打开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/197360.html

相关文章:

  • 网站建设设计 飞沐怀化seo推广
  • 凡科网站内容怎么做效果好seo关键词排行优化教程
  • 莱芜租房镇江seo公司
  • 外贸建个网站多少钱百度电话客服24小时
  • 陕西住房和城乡建设厅网站6百度搜题
  • 网站建设先航科技武汉seo网站
  • 厦门制作网站企业优书网
  • java二手图书网站开发如何网络推广新产品
  • 专门做家纺的网站sem 推广软件
  • 一个空间如何做多个网站百度人工服务24小时电话
  • 天河建设网站方案链友咨询
  • 淄博网站制作方案台州百度关键词排名
  • 怎么做网站logoseo博客教程
  • 设计师做网站的流程百度搜索关键词排名优化
  • 温州网约车哪个平台最好seo云优化软件破解版
  • 做网站备案都需要什么东西友情链接交换平台源码
  • 互利互通网站建设免费注册网站有哪些
  • 青浦网站建设推广点击排名优化
  • 网站建设新方式简单省时搜索引擎调词工具
  • 上海网站建设哪里好百度小程序入口
  • 网站建设项目开发潍坊seo教程
  • 重庆为什么导航用不了汕头seo收费
  • 百度网站站长工具外贸seo建站
  • 深圳大型商城网站建设新媒体营销案例ppt
  • 网站建设 聊城关键词分析工具网站
  • 备案博客域名做视频网站会怎么样在线推广企业网站的方法
  • 苏州网站建设设计制作公司怎么样网站网络优化外包
  • 163企业邮箱官网seo优化工具有哪些
  • 赤峰网站制作四种营销模式
  • 连云港网站优化搜索引擎优化seo名词解释