揭秘Spring Boot中Elasticsearch高亮字段配置:3步实现精准文本高亮

第一章:Spring Boot中Elasticsearch高亮功能概述

在构建现代搜索应用时,高亮显示匹配关键词是提升用户体验的重要手段。Spring Boot集成Elasticsearch后,可通过其丰富的查询DSL支持实现精准的高亮功能,使用户能够快速识别搜索结果中的相关片段。

高亮功能的核心作用

  • 突出显示查询关键词在文档中的位置
  • 提升搜索结果的可读性和交互性
  • 支持多字段、多片段高亮渲染

高亮配置的基本结构

在Elasticsearch查询中,高亮部分通过highlight节点定义,指定需要高亮的字段及格式要求。以下是一个典型的REST风格请求示例:
{
  "query": {
    "match": {
      "content": "Spring Boot"
    }
  },
  "highlight": {
    "fields": {
      "content": {}  // 声明对content字段进行高亮
    },
    "pre_tags": ["<em>"],  // 匹配词前缀标签
    "post_tags": ["</em>"] // 匹配词后缀标签
  }
}
上述代码中,Elasticsearch会在返回结果的highlight部分包含带有<em>标签包裹的关键词片段,便于前端渲染。

Spring Data Elasticsearch中的实现方式

通过NativeSearchQueryBuilder可编程构建高亮查询:
Query query = new NativeSearchQueryBuilder()
    .withQuery(matchQuery("content", "Spring Boot"))
    .withHighlightFields(new HighlightBuilder.Field("content"))
    .build();
该Java代码在Spring Boot应用中触发Elasticsearch查询,并自动解析高亮结果,适用于服务层的数据封装与传输。
配置项说明
pre_tags自定义高亮开始标签,如 <strong>
post_tags自定义高亮结束标签
fragment_size控制高亮片段长度,默认为100字符

第二章:Elasticsearch高亮机制原理剖析

2.1 高亮功能的核心工作原理与应用场景

高亮功能通过词法分析识别文本中的关键词、语法结构或特定模式,并利用样式标记实现视觉突出。其核心依赖于正则表达式匹配与DOM节点遍历,确保精准定位并渲染目标内容。
实现机制
系统首先构建关键词索引规则,再结合语言上下文进行语法解析。例如,在代码编辑器中对关键字function进行高亮:

const highlightKeywords = (text) => {
  return text.replace(/\b(function|return|const)\b/g, '<span class="keyword">$&</span>');
};
该函数使用正则表达式全局匹配JavaScript保留字,将其包裹为带样式的标签,从而实现语法着色。参数\b确保单词边界精确匹配,避免误替换变量名中包含关键字的情况。
典型应用场景
  • 代码编辑器中的语法高亮
  • 搜索结果中关键词标亮
  • 日志分析工具的关键事件提示

2.2 pre_tags与post_tags的语义解析与配置策略

标签阶段的语义划分
pre_tags:
  - "validation"
  - "auth-check"
post_tags:
  - "logging"
  - "monitoring"
上述配置中,pre_tags用于执行操作前的条件校验与权限检查,确保流程安全;post_tags则负责操作完成后的日志记录与监控上报,实现链路追踪。
配置优化策略
  • 职责分离:将前置校验与后置处理逻辑解耦,提升可维护性
  • 执行顺序控制:pre_tags按声明顺序前置执行,post_tags逆序执行,形成“栈式”行为
  • 动态注入支持:允许运行时通过元数据扩展标签,增强灵活性
典型应用场景
场景pre_tagspost_tags
API调用auth, rate-limitlog, metrics
数据写入schema-validatenotify, backup

2.3 字段匹配与分词器对高亮效果的影响分析

在全文检索中,高亮功能依赖于字段匹配精度与分词器的选择。不同分词器对文本切分方式差异显著,直接影响关键词的匹配位置与高亮结果。
分词器对高亮的影响
例如,标准分词器(Standard Analyzer)按词边界切分,而中文分词器如 IK 支持细粒度切分。若搜索“数据库优化”,IK 分词器可识别“数据库”和“优化”,提升片段匹配率。
{
  "analyzer": "ik_max_word",
  "field": "content",
  "highlight": {
    "pre_tags": ["<em>"],
    "post_tags": ["</em>"]
  }
}
上述配置使用 IK 分词器,ik_max_word 模式确保最大颗粒度切分,配合 pre_tags 和 post_tags 定义高亮标签,使匹配词在返回结果中突出显示。
字段类型与匹配策略
使用 match_phrase 可提升短语匹配准确性,避免因分词碎片化导致高亮错位。字段若采用 text 类型并绑定特定分词器,能显著优化用户体验。

2.4 高亮片段大小(fragment_size)与数量控制

控制高亮片段的粒度
在搜索结果中,高亮显示匹配内容时,fragment_size 参数决定了每个高亮片段的字符长度。默认值通常为100,适用于大多数场景,但可根据实际需求调整。
{
  "highlight": {
    "fragment_size": 150,
    "number_of_fragments": 3
  }
}
上述配置将每个高亮片段扩展至150字符,并最多返回3个片段。增大 fragment_size 可提供更完整的上下文,但可能增加响应体积。
片段数量的权衡
number_of_fragments 控制返回的高亮片段总数。设置为0表示不切分,返回完整字段;值越大,覆盖的匹配点越多,但可能引入冗余。
  • 短文本(如标题):建议设置为1,避免过度切分
  • 长文档(如文章正文):可设为3–5,提升匹配信息覆盖率

2.5 Plain与Fast Vector高亮模式对比与选型建议

核心机制差异
Plain模式逐词匹配关键词,适用于简单文本高亮;Fast Vector采用向量化匹配,将文本与查询词映射至语义空间,支持模糊匹配与同义词扩展。
性能与精度对比
特性Plain模式Fast Vector模式
响应速度快较快(首次计算开销高)
内存占用低较高(需加载向量模型)
语义理解无支持
典型应用场景
  • Plain模式:日志关键字高亮、静态规则匹配
  • Fast Vector模式:智能客服、语义搜索结果高亮

// Fast Vector高亮启用示例
const highlighter = new VectorHighlighter({
  model: 'sentence-bert',
  threshold: 0.75 // 相似度阈值
});
highlighter.highlight(text, query);
上述配置通过预训练模型提取语义向量,threshold控制匹配灵敏度,值越高越精确但召回率下降。

第三章:Spring Boot集成Elasticsearch环境准备

3.1 引入Spring Data Elasticsearch依赖与版本适配

在Spring Boot项目中集成Elasticsearch,首先需引入Spring Data Elasticsearch的依赖。通过Maven管理依赖时,应确保其版本与所使用的Spring Boot版本兼容。
  1. 确认Spring Boot基础版本,例如2.7.x或3.x
  2. 选择对应兼容的Spring Data Elasticsearch版本
  3. 添加Maven依赖配置
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
上述代码声明了Spring Data Elasticsearch的核心依赖。Spring Boot 2.7.x默认集成Elasticsearch 7.x客户端,而Spring Boot 3.x起使用Java REST High Level Client的继任者——Elasticsearch Java API Client。版本错配可能导致连接失败或序列化异常,因此建议查阅官方版本映射表进行精确匹配。

3.2 配置Elasticsearch连接与索引映射结构

在构建高效搜索系统时,正确配置Elasticsearch连接是数据交互的基础。首先需设置客户端连接参数,确保与集群稳定通信。
连接配置示例
{
  "hosts": ["http://192.168.1.10:9200"],
  "timeout": 30,
  "retries": 3
}
上述配置指定了Elasticsearch节点地址、请求超时时间及重试次数,适用于生产环境的高可用场景。
索引映射设计
合理的映射(Mapping)能提升查询性能。例如定义商品索引结构:
字段类型说明
titletext全文检索字段
pricefloat用于范围查询
categorykeyword用于聚合分析
通过明确字段类型,避免动态映射带来的类型误判问题,保障查询准确性。

3.3 定义实体类与Repository接口实现基础查询

在Spring Data JPA中,实体类用于映射数据库表结构。通过`@Entity`注解标识类为持久化实体,并使用`@Id`定义主键。
实体类定义示例
@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String email;

    // Getter 和 Setter 省略
}
上述代码中,@Table指定对应数据库表名,@GeneratedValue表示主键自增策略。
Repository接口实现查询
Spring Data JPA通过继承JpaRepository自动生成基础CRUD方法:
public interface UserRepository extends JpaRepository<User, Long> {
    List<User> findByName(String name);
}
方法命名遵循规范,框架自动解析为SQL查询,无需手动实现。例如findByName会生成根据name字段查询的语句。

第四章:实现精准文本高亮的编码实践

4.1 构建包含高亮指令的SearchQuery请求

在实现全文搜索时,高亮显示匹配关键词是提升用户体验的关键功能。Elasticsearch 提供了 `highlight` 指令,可在 SearchQuery 请求中嵌入,用于标识文本中被命中的字段片段。
高亮配置结构
通过在查询 DSL 中添加 `highlight` 节点,指定需要高亮的字段与展示规则:
{
  "query": {
    "match": { "content": "搜索引擎" }
  },
  "highlight": {
    "fields": {
      "content": {}
    },
    "pre_tags": ["<em>"],
    "post_tags": ["</em>"]
  }
}
上述配置中,`pre_tags` 与 `post_tags` 定义了高亮词的包裹标签,此处使用 `` 实现斜体突出。`fields.content` 表示仅对 `content` 字段返回高亮片段。
响应结果处理
查询返回时,`highlight` 字段将包含以字段名为键的高亮片段数组,应用层需将其合并至原始文档展示,确保用户直观识别匹配位置。

4.2 使用HighlightBuilder配置高亮字段与样式

在Elasticsearch查询中,高亮显示匹配内容能显著提升用户体验。`HighlightBuilder`允许开发者精确控制哪些字段需要高亮以及如何呈现。
基础高亮配置
通过`HighlightBuilder`可指定字段并设置前后标签:

HighlightBuilder highlightBuilder = new HighlightBuilder();
highlightBuilder.field("title");
highlightBuilder.preTags("<em>");
highlightBuilder.postTags("</em>");
上述代码表示对`title`字段进行高亮,匹配词将被`<em>`标签包裹,适用于HTML渲染场景。
参数说明
  • field:定义需高亮的字段名称;
  • preTags:设置高亮词前缀样式标签;
  • postTags:设置高亮词后缀闭合标签。
支持多字段高亮与自定义CSS类,增强前端展示灵活性。

4.3 解析SearchHits中的高亮结果并封装返回

在Elasticsearch查询响应中,高亮片段包含用户关注的关键词匹配位置。需从`SearchHits`中提取`highlight`字段,并映射回原始文档。
高亮结果结构解析
高亮数据以字段名为键,片段列表为值,通常位于`hit.getHighlightFields()`中。
Map<String, HighlightField> highlightMap = hit.getHighlightFields();
HighlightField titleField = highlightMap.get("title");
String highlightedTitle = titleField != null ? 
    highlightField.fragments()[0].string() : document.getTitle();
上述代码获取标题字段的高亮片段,若无则回退至原始值,避免空指针异常。
封装高亮结果
建议使用DTO对象统一包装结果:
  • 保留原始字段数据
  • 注入高亮版本内容
  • 便于前端条件渲染

4.4 处理多字段高亮与HTML标签安全输出

多字段高亮实现策略
在搜索结果中,常需对多个字段(如标题、摘要、正文)进行关键词高亮。通过遍历返回字段并应用正则替换,可实现精准高亮:

function highlightFields(text, keyword) {
  if (!keyword) return text;
  const regex = new RegExp(`(${keyword})`, 'gi');
  return text.replace(regex, '<mark>$1</mark>');
}
该函数接收文本与关键词,利用RegExp构造全局不区分大小写的匹配模式,并使用<mark>标签包裹命中词,确保语义化标记。
防止XSS攻击的安全输出
直接渲染用户内容存在风险,必须对HTML特殊字符进行转义:
  • < 转义为 &lt;
  • > 转义为 &gt;
  • & 转义为 &amp;
转义后的内容再插入DOM,可有效防御脚本注入,保障前端展示安全。

第五章:总结与高亮功能优化方向

性能瓶颈的识别与响应式优化策略
在大型文档系统中,高亮功能常因 DOM 节点过多导致重绘延迟。可通过节流(throttling)机制控制高亮触发频率:

const throttle = (func, delay) => {
  let inProgress = false;
  return (...args) => {
    if (!inProgress) {
      func.apply(this, args);
      inProgress = true;
      setTimeout(() => inProgress = false, delay);
    }
  };
};

// 应用于滚动事件
document.addEventListener('scroll', throttle(highlightVisibleText, 100));
语义化高亮增强用户体验
结合自然语言处理模型,可实现基于关键词重要性的差异化高亮。例如,在技术文档中自动识别函数名、类名并赋予不同颜色标签:
  • class 声明:蓝色背景,圆角边框
  • function 调用:黄色高亮,下划线标注
  • 注释段落:浅绿色底纹,降低透明度
跨设备兼容性适配方案
移动端触摸选择与桌面端鼠标事件存在差异,需统一事件抽象层。使用 Pointer Events API 可简化多端逻辑:
设备类型推荐事件模型注意事项
桌面浏览器mouseup + getSelection()防止 iframe 跨域异常
移动 Safaritouchend 延迟 300ms 触发需禁用双击缩放
Android WebViewCompositionEvent 回退支持检测 selection API 可用性
Java 14核心特性解析:Switch表达式、NPE增强与模式匹配实战 Switch表达式是Java对控制流范式的重构,将语句升级为值计算表达式,解决传统switch易错、难维护、不可测试等痛点;NullPointerException增强机制则从JVM底层实现空值溯源,让异常信息从模糊报错变为精准定位说明书;二者与instanceof模式匹配、Record不可变数据建模协同,构成现代Java工程化开发的关键能力组合。本文聚焦真实金融系统升级案例,详解如何用这些特性降低调试成本、消除隐性bug、提升代码可读性与类型安全性。 阅读详情

相关推荐

GitHub Copilot如何导致开发者能力退化与应对策略

AI编程辅助工具如GitHub Copilot,本质是基于统计模式的代码补全引擎,而非真正理解业务逻辑的协作者。其原理决定了它擅长生成语法正确但缺乏上下文鲁棒性的代码,容易诱发边界校验缺失、硬编码泛滥和架构抽象不足等典型问题。这种‘结果导向’的交互方式,长期可能弱化开发者的调试本能、类型安全意识和系统性建模能力,形成Copy-Paste Developer现象。在快速交付压力下,该风险在中小团队尤为突出。本文聚焦于识别Copilot引发的能力断层信号,并提供可落地的工程化应对方案:从提示词精调、沙盒化集成到

weixin_30892889的博客 325

高效实现搜索高亮:Spring Boot中Elasticsearch字段高亮的3种高级用法

掌握Spring Boot Elasticsearch的高亮字段实现技巧,提升搜索结果可读性。详解3种高级用法:自定义高亮标签、多字段高亮与性能优化,适用于商品搜索、日志分析等场景。代码清晰、效果显著,值得收藏。

CodeNexus的博客 532

SpringBoot+Vue+Mysql社区医院信息平台(源码+文档)

SpringBoot+Vue+Mysql学生宿舍信息管理系统 WEB端软件项目(源码+文档) 项目包含:①完整源码(后端+管理后台+用户前台);②数据库脚本文件;③万字论文文档;④开题报告;⑤答辩PPT;⑥项目运行视频教程。 项目架构: B/S 架构、MVC 分层设计 技术栈: Java、MySQL、SpringBoot、MyBatis-Plus、Token 权限校验、管理后台 Vue+ElementUI+ECharts、用户前台 Layui+jQuery、Maven 构建。 一、角色设计 学生用户: 注册登录、浏览宿舍信息、查询宿舍安排、在线报修、缴费查询、失物招领、桶装水预订、评论交流、收藏等。 商家用户: 注册登录、桶装水品牌与商品信息维护、预订订单查看与处理。 维修人员: 注册登录、查看待处理报修、接单维修、填写报修处理结果与进度反馈。 管理员: 学生管理、班级管理、宿舍信息管理、宿舍安排管理、报修处理管理、缴费信息管理、卫生检查与文明宿舍管理、失物招领管理、桶装水与商家管理、维修人员管理、公告资讯与轮播图管理等。 二、前台功能模块(学生端) 1. 首页展示:轮播图、宿舍公告、最新动态推荐、常用服务快速入口 2. 宿舍信息模块:宿舍列表、楼栋与房间条件筛选、宿舍详情查看、我的宿舍安排查询 3. 在线报修模块:在线提交宿舍设施报修申请、上传故障描述、查看报修进度与维修处理结果 4. 缴费模块:水电等缴费记录查询、缴费状态查看 5. 卫生检查与文明宿舍:宿舍卫生检查结果公示、文明宿舍展示 6. 失物招领模块:失物信息发布、招领信息发布、详情查看、评论互动 7. 桶装水预订:桶装水品牌与商品浏览、在线预订、我的预订记录查询 8. 假期留宿:假期留校申请提交、申请记录查询 9. 评论与收藏:信息评论、查看他人评论、评论回复互动、收藏感兴趣的内容 10. 个人中心...

Elasticsearch实战:搜索结果高亮显示功能完整实现指南

在搜索引擎、日志检索、商品搜索等场景中,高亮显示搜索关键词是提升用户体验的核心功能之一。用户能快速定位关键词在文本中的位置,大幅提升检索效率。Elasticsearch(ES)内置了高亮(Highlighting)模块,无需手动处理文本匹配,开箱即用支持多种高亮策略。本文将从原理、流程图、基础实现、高级配置、多字段高亮、代码实战全维度讲解ES高亮功能,带你从零到一掌握高亮显示,内容可直接落地到项目中。ES高亮功能:在搜索结果中,将匹配查询条件的关键词用自定义HTML标签/样式。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 2222

YOLOv8作物病害检测实战源码

这是一套基于YOLOv8n的农田病虫害目标检测系统,对叶片照片做目标检测,识别健康叶片、褐斑病、白粉病、锈病四类,并给出对应防治建议。全流程纯CPU可跑,配套交付完整Python源码、9章实战教程(md/html/pdf三种格式)、100张自造样本及YOLO标签、训练曲线与混淆矩阵截图、Tkinter界面和答辩PPT。 系统围绕五项功能展开:同一套推理逻辑覆盖图像、视频、摄像头三种来源;图形界面选文件即检测,画面叠彩色框标注病名与置信度,右侧面板同步给出症状与防治措施;检测记录自动写入CSV,统计页一键生成四类病害占比饼图;训练结束自动产出损失与精度曲线;内置防治建议文案库,检测命中即回填面板。 选型用YOLOv8n nano档,参数量约320万、权重约6.2MB,CPU单帧几十毫秒,小样本训练5到8分钟完成。数据由data_gen.py程序化绘制100张叶片图,固定随机种子,重跑分布一致,不依赖公开数据集。依赖全部锁版本,教程第7章整理了19条真实报错及排查方法,第8章给出换模型档、换PlantVillage数据集的迁移路径。 适合做计算机视觉方向课程设计或毕业设计的学生,也适合智慧农业方向想了解检测模型如何落进业务面板的学习者。不需要GPU,不需要系统学过目标检测,教程第3章会按需补齐原理。 使用时先pip install -r requirements.txt装好依赖,download_data.py下载预训练权重,data_gen.py生成样本后train.py训练,完成后用main.py infer批量检测或main.py gui启动界面。

数据挖掘实战:决策树 + 聚类 + 关联规则,零 Key 离线可跑(Python 源码)

数据挖掘实战包。用 Python 标准库实现 CART 风格决策树、K-Means 聚类与 Apriori 关联规则,在虚构「星河便利店」会员表和购物篮上跑通分类、分群与购物篮分析,并给出准确率、轮廓系数、支持度/置信度/提升度。零第三方依赖、零 API Key 即可离线跑通。含 4 个样例、离线冒烟、中文 README(含「使用方法」)。均为作者原创可运行源码。MIT。作者 blog.youkuaiyun.com/mtl1994

别再手动拼接高亮标签了!Spring Boot自动处理Elasticsearch高亮字段的终极方案

轻松解决Spring Boot Elasticsearch的高亮字段处理难题,无需手动拼接标签。通过集成SearchHit和HighlightField自动解析,适用于搜索结果高亮场景,提升开发效率与代码可读性。配置简单,效果立现,值得收藏。

VarFlow的博客 346

科技中介服务机构在技术供需对接中如何实现服务流程的自动化与标准化?.docx

科技中介服务机构在技术供需对接中如何实现服务流程的自动化与标准化?

Spring Boot集成Elasticsearch高亮功能全攻略(高亮字段处理终极指南)

掌握Spring Boot Elasticsearch的高亮字段处理技巧,解决搜索结果精准高亮难题。涵盖REST High Level Client配置、QueryBuilder构建及HTML标签高亮显示,适用于商品搜索、日志检索等场景,提升用户体验与搜索友好性,值得收藏。

DeepLens的博客 1246

产业园区如何高效对接企业技术需求与高校科研成果?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

国央企创新负责人如何快速掌握本地科技资源分布与匹配情况?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

Easy-Es高级功能揭秘:高亮搜索、地理距离与评分排序实战教程

Easy-Es是一款功能强大的 Elasticsearch ORM 框架,它简化了 Elasticsearch 的操作流程,让开发者能够更专注于业务逻辑的实现。本文将为您详细介绍 Easy-Es 中的高亮搜索、地理距离查询和评分排序这三大高级功能,帮助您更好地利用 Elasticsearch 的强大能力。 ## 一、高亮搜索:让搜索结果更醒目 在进行全文搜索时,高亮显示匹配的关键词可以让用户更

gitblog_00036的博客 506

国央企创新负责人如何实现科技成果的精准识别与高效筛选?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

揭秘Spring Boot中Elasticsearch高亮字段配置:5步实现精准高亮渲染

掌握Spring Boot Elasticsearch的高亮字段配置,5步实现搜索结果精准高亮渲染,适用于商品、文档等场景。通过QueryBuilder与HighlightBuilder结合,提升用户体验,值得收藏。

FuncLens的博客 1043

高校技术转移办公室人员如何系统化管理科技成果信息?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

科技中介服务机构如何构建标准化、模块化的智能服务工具?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

揭秘Spring Boot中Elasticsearch高亮失效问题:5步快速定位并解决

快速解决Spring Boot Elasticsearch 的高亮失效问题,涵盖查询配置、字段映射、高亮设置等5步排查法,适用于搜索结果标记场景,提升用户体验。方法实用高效,值得收藏。

CompiGap的博客 746

fab-pm-optimizer-python-entry-py39-20261021-v1-1-0

fab-pm-optimizer-python-entry-py39-20261021-v1-1-0

上一篇: 模块化开发迫在眉睫,你还不懂requires transitive的传递规则?
下一篇: 延迟加载到底要不要开?MyBatis中association性能与内存的博弈,你选对了吗?
fastdebug
博客等级 码龄11年 149粉丝 2006原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值