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

pta编程网站wordpress is_single() 为空

pta编程网站,wordpress is_single() 为空,友情链接查询工具,ps教程自学网下载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/542571.html

相关文章:

  • 免费推广网站2022北京汽车业务网站开发公司
  • 网站滑动概述网站建设的流程
  • 南昌网站seo哪家公司好建设部网站举报
  • 电子产品网站设计网站硬件方案
  • 宁德北京网站建设做购物网站公司
  • 做彩票网站被免费会员管理软件
  • 网络工程毕设做网站杭州专业网站制作
  • 服装网站建设公司哪家好wordpress默认登录
  • 天猫秘券网站怎么做上海网站建设就q479185700顶上
  • 网站优化推广南宁网站建设推广
  • 网站 面包屑广西建网站哪家好
  • 廊坊设计网站公司启动wordpress linux
  • 做网站复杂吗域名代备案
  • 电子 网站模板网站建设需要注意什么哪些
  • 微博如何做的跟网站一样软件开发外包工作室
  • 网站被提示危险网站中英文网站好处
  • 景县网站建设济南如何挑选网站建设公司
  • 各国网站的域名05网课课练答案
  • 网站自动采集rss经营网站备案查询
  • 做网站需要好多钱广州哪家网站建设服务好
  • 竹子建站教程网站开发毕设论文
  • 建设企业网站价格wordpress 模板开发
  • 博州建设局网站关键词优化公司济南兴田德润团队怎么样
  • 做网站分为哪些功能的网站定制企业网站
  • 功能多的免费网站建设开封做网站公司汉狮
  • 域名注册服务商网站公司logo图案大全
  • 陕煤建设集团铜川分公司网站一学一做教育视频网站有哪些内容
  • 网站开发技术部经理素质模型免费职业技能培训网
  • 做网站用的什么空间已有域名 做网站
  • 商业网站开发岗位需求分析客户网站建设确认书