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

如何自做自己的网站互动营销成功案例

如何自做自己的网站,互动营销成功案例,sem和seo的关系,北京市门户网站建设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/287501.html

相关文章:

  • 网页布局的类型有哪些杭州小周seo
  • wordpress最底部版權个人如何优化网站有哪些方法
  • 成功案例 品牌网站seo信息是什么
  • 移动版网站建设seo 资料包怎么获得
  • 唐山网站开发公司拼多多商品关键词搜索排名
  • 广东网站备案查询b2b外链代发
  • 青岛广新信建设咨询公司网站爱站网怎么用
  • 安阳做网站推广制作网页的代码
  • 顺德网站建设包括哪些seo作弊
  • 网站竞价怎么做品牌营销策划网站
  • 网站建设拿什么框架今天上海最新新闻事件
  • 网站建设先进个人免费做做网站
  • 广东网站建设公司有哪些快速优化seo软件
  • 怎么自己开一个网站南阳本地网络推广优化公司
  • 福州网站制作公司名字台州seo快速排名
  • 网站首页动画代码怎样做推广营销
  • 织梦医疗网站源码免费python在线网站
  • 四川省建设工程信息网站网站域名注册
  • 生产销售管理软件网站优化是什么意思
  • 什么网站做任务赚钱吗巨量数据分析入口
  • 辉玲建设集团有限公司网站查域名ip地址查询
  • 门户网站维护怎么做北京百度seo价格
  • 国展做网站的公司线上广告推广
  • 代理公司注销需要多少钱西安seo招聘
  • 高端大气的医院网站网站广告收费标准
  • wordpress 用户角色插件seo小白入门
  • 网站怎么做自动回复的客服线下营销方式主要有哪些
  • 二级域名网站好不好今日足球比赛分析推荐
  • 湖南网站建设企业网络营销策划的基本原则
  • 学校网站建设评分标准室内设计培训哪个机构比较好