Springcloudalibaba整合es!实现相关性排序,集成完代码真香

这篇具有很好参考价值的文章主要介绍了Springcloudalibaba整合es!实现相关性排序,集成完代码真香。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

org.springframework.boot

spring-boot-starter-data-elasticsearch

2.0.1.RELEASE

com.querydsl

querydsl-apt

4.2.2

com.querydsl

querydsl-jpa

4.2.2

ma.glasnost.orika

orika-core

1.5.2

相关性排序实现思路原理图:

=============

Springcloudalibaba整合es!实现相关性排序,集成完代码真香,2024年程序员学习,elasticsearch,java,前端

核心代码实现:

Springcloudalibaba整合es!实现相关性排序,集成完代码真香,2024年程序员学习,elasticsearch,java,前端

kibana:查询json

{

“function_score” : {

“query” : {

“bool” : {

“must” : [

{

“multi_match” : {

“query” : “产品描述”,

“fields” : [

“conent^1.0”,

“title^1.0”,

“version^1.0”

],

“type” : “best_fields”,

“operator” : “OR”,

“slop” : 0,

“prefix_length” : 0,

“max_expansions” : 50,

“zero_terms_query” : “NONE”,

“auto_generate_synonyms_phrase_query” : true,

“fuzzy_transpositions” : true,

“boost” : 1.0

}

}

],

“filter” : [

{

“terms” : {

“usage_scenarios_type” : [

“1”,

“12”

],

“boost” : 1.0

}

},

{

“terms” : {

“manual_type” : [

“2”,

“1”,

“4”

],

“boost” : 1.0

}

},

{

“terms” : {

“parentId” : [

“17”,

“12”,

“2”

],

“boost” : 1.0

}

}

],

“adjust_pure_negative” : true,

“boost” : 1.0

}

},

“functions” : [

{

“filter” : {

“bool” : {

“should” : [

{

“bool” : {

“must” : [

{

“query_string” : {

“query” : “17”,

“default_field” : “parentId”,

“fields” : [ ],

“type” : “best_fields”,

“default_operator” : “or”,

“max_determinized_states” : 10000,

“enable_position_increments” : true,

“fuzziness” : “AUTO”,

“fuzzy_prefix_length” : 0,

“fuzzy_max_expansions” : 50,

“phrase_slop” : 0,

“escape” : false,

“auto_generate_synonyms_phrase_query” : true,

“fuzzy_transpositions” : true,

“boost” : 29.0

}

}

],

“adjust_pure_negative” : true,

“boost” : 1.0

}

},

{

“bool” : {

“must” : [

{

“query_string” : {

“query” : “2”,

“default_field” : “manual_type”,

“fields” : [ ],

“type” : “best_fields”,

“default_operator” : “or”,

“max_determinized_states” : 10000,

“enable_position_increments” : true,

“fuzziness” : “AUTO”,

“fuzzy_prefix_length” : 0,

“fuzzy_max_expansions” : 50,

“phrase_slop” : 0,

“escape” : false,

“auto_generate_synonyms_phrase_query” : true,

“fuzzy_transpositions” : true,

“boost” : 29.0

}

}

],

“adjust_pure_negative” : true,

“boost” : 1.0

}

},

{

“bool” : {

“must” : [

{

“query_string” : {

“query” : “1”,

“default_field” : “usage_scenarios_type”,

“fields” : [ ],

“type” : “best_fields”,

“default_operator” : “or”,

“max_determinized_states” : 10000,

“enable_position_increments” : true,

“fuzziness” : “AUTO”,

“fuzzy_prefix_length” : 0,

“fuzzy_max_expansions” : 50,

“phrase_slop” : 0,

“escape” : false,

“auto_generate_synonyms_phrase_query” : true,

“fuzzy_transpositions” : true,

“boost” : 29.0

}

}

],

“adjust_pure_negative” : true,

“boost” : 1.0

}

},

{

“bool” : {

“must” : [

{

“query_string” : {

“query” : “12”,

“default_field” : “parentId”,

“fields” : [ ],

“type” : “best_fields”,

“default_operator” : “or”,

“max_determinized_states” : 10000,

“enable_position_increments” : true,

“fuzziness” : “AUTO”,

“fuzzy_prefix_length” : 0,

“fuzzy_max_expansions” : 50,

“phrase_slop” : 0,

“escape” : false,

“auto_generate_synonyms_phrase_query” : true,

“fuzzy_transpositions” : true,

“boost” : 14.0

}

}

],

“adjust_pure_negative” : true,

“boost” : 1.0

}

},

{

“bool” : {

“must” : [

{

“query_string” : {

“query” : “2”,

“default_field” : “manual_type”,

“fields” : [ ],

“type” : “best_fields”,

“default_operator” : “or”,

“max_determinized_states” : 10000,

“enable_position_increments” : true,

“fuzziness” : “AUTO”,

“fuzzy_prefix_length” : 0,

“fuzzy_max_expansions” : 50,

“phrase_slop” : 0,

“escape” : false,

“auto_generate_synonyms_phrase_query” : true,

“fuzzy_transpositions” : true,

“boost” : 14.0

}

}

],

“adjust_pure_negative” : true,

“boost” : 1.0

}

},

{

“bool” : {

“must” : [

{

“query_string” : {

“query” : “1”,

“default_field” : “usage_scenarios_type”,

“fields” : [ ],

“type” : “best_fields”,

“default_operator” : “or”,

“max_determinized_states” : 10000,

“enable_position_increments” : true,

“fuzziness” : “AUTO”,

“fuzzy_prefix_length” : 0,

“fuzzy_max_expansions” : 50,

“phrase_slop” : 0,

“escape” : false,

“auto_generate_synonyms_phrase_query” : true,

“fuzzy_transpositions” : true,

“boost” : 14.0

}

}

],

“adjust_pure_negative” : true,

“boost” : 1.0

}

},

{

“bool” : {

“must” : [

{

“query_string” : {

“query” : “12”,

“default_field” : “parentId”,

“fields” : [ ],

“type” : “best_fields”,

“default_operator” : “or”,

“max_determinized_states” : 10000,

“enable_position_increments” : true,

“fuzziness” : “AUTO”,

“fuzzy_prefix_length” : 0,

“fuzzy_max_expansions” : 50,

“phrase_slop” : 0,

“escape” : false,

“auto_generate_synonyms_phrase_query” : true,

“fuzzy_transpositions” : true,

“boost” : 9.0

}

}

],

“adjust_pure_negative” : true,

“boost” : 1.0

}

},

{

“bool” : {

“must” : [

{

“query_string” : {

“query” : “1”,

“default_field” : “manual_type”,

“fields” : [ ],

“type” : “best_fields”,

“default_operator” : “or”,

“max_determinized_states” : 10000,

“enable_position_increments” : true,

“fuzziness” : “AUTO”,

“fuzzy_prefix_length” : 0,

“fuzzy_max_expansions” : 50,

“phrase_slop” : 0,

“escape” : false,

“auto_generate_synonyms_phrase_query” : true,

“fuzzy_transpositions” : true,

“boost” : 9.0

}

}

],

“adjust_pure_negative” : true,

“boost” : 1.0

}

},

{

“bool” : {

“must” : [

{

“query_string” : {

“query” : “1”,

“default_field” : “usage_scenarios_type”,

“fields” : [ ],

“type” : “best_fields”,

“default_operator” : “or”,

“max_determinized_states” : 10000,

“enable_position_increments” : true,

“fuzziness” : “AUTO”,

“fuzzy_prefix_length” : 0,

“fuzzy_max_expansions” : 50,

“phrase_slop” : 0,

“escape” : false,

“auto_generate_synonyms_phrase_query” : true,

“fuzzy_transpositions” : true,

“boost” : 9.0

}

}

],

“adjust_pure_negative” : true,

“boost” : 1.0

}

}

],

“adjust_pure_negative” : true,

“boost” : 1.0

}

},

“weight” : 9999.0

},

{

“filter” : {

“bool” : {

“should” : [

{

“bool” : {

“must” : [

{

“query_string” : {

“query” : “17”,

“default_field” : “parentId”,

“fields” : [ ],

“type” : “best_fields”,

“default_operator” : “or”,

“max_determinized_states” : 10000,

“enable_position_increments” : true,

“fuzziness” : “AUTO”,

“fuzzy_prefix_length” : 0,

“fuzzy_max_expansions” : 50,

“phrase_slop” : 0,

“escape” : false,

“auto_generate_synonyms_phrase_query” : true,

“fuzzy_transpositions” : true,

“boost” : 29.0

}

}

],

“adjust_pure_negative” : true,

“boost” : 1.0

}

},

{

“bool” : {

“must” : [

{

“query_string” : {

“query” : “2”,

“default_field” : “manual_type”,

“fields” : [ ],

“type” : “best_fields”,

“default_operator” : “or”,

“max_determinized_states” : 10000,

“enable_position_increments” : true,

“fuzziness” : “AUTO”,

“fuzzy_prefix_length” : 0,

“fuzzy_max_expansions” : 50,

“phrase_slop” : 0,

“escape” : false,

“auto_generate_synonyms_phrase_query” : true,

“fuzzy_transpositions” : true,

“boost” : 29.0

}

}

],

“adjust_pure_negative” : true,

“boost” : 1.0

}

},

{

“bool” : {

“must” : [

{

“query_string” : {

“query” : “1”,

“default_field” : “usage_scenarios_type”,

“fields” : [ ],

“type” : “best_fields”,

“default_operator” : “or”,

“max_determinized_states” : 10000,

“enable_position_increments” : true,

“fuzziness” : “AUTO”,

“fuzzy_prefix_length” : 0,

“fuzzy_max_expansions” : 50,

“phrase_slop” : 0,

“escape” : false,

“auto_generate_synonyms_phrase_query” : true,

“fuzzy_transpositions” : true,

“boost” : 29.0

}

}

],

“adjust_pure_negative” : true,

“boost” : 1.0

}

},

{

“bool” : {

“must” : [

{

“query_string” : {

“query” : “12”,

“default_field” : “parentId”,

“fields” : [ ],

“type” : “best_fields”,

“default_operator” : “or”,

“max_determinized_states” : 10000,

“enable_position_increments” : true,

“fuzziness” : “AUTO”,

“fuzzy_prefix_length” : 0,

“fuzzy_max_expansions” : 50,

“phrase_slop” : 0,

“escape” : false,

“auto_generate_synonyms_phrase_query” : true,

“fuzzy_transpositions” : true,

“boost” : 14.0

}

}

],

“adjust_pure_negative” : true,

“boost” : 1.0

}

},

{

“bool” : {

“must” : [

{

“query_string” : {

“query” : “2”,

“default_field” : “manual_type”,

“fields” : [ ],

“type” : “best_fields”,

“default_operator” : “or”,

“max_determinized_states” : 10000,

“enable_position_increments” : true,

“fuzziness” : “AUTO”,

“fuzzy_prefix_length” : 0,

“fuzzy_max_expansions” : 50,

“phrase_slop” : 0,

“escape” : false,

“auto_generate_synonyms_phrase_query” : true,

“fuzzy_transpositions” : true,

“boost” : 14.0

}

}

],

“adjust_pure_negative” : true,

“boost” : 1.0

}

},

{

“bool” : {

“must” : [

{

“query_string” : {

“query” : “1”,

“default_field” : “usage_scenarios_type”,

“fields” : [ ],

“type” : “best_fields”,

“default_operator” : “or”,

“max_determinized_states” : 10000,

“enable_position_increments” : true,

“fuzziness” : “AUTO”,

“fuzzy_prefix_length” : 0,

“fuzzy_max_expansions” : 50,

“phrase_slop” : 0,

“escape” : false,

“auto_generate_synonyms_phrase_query” : true,

“fuzzy_transpositions” : true,

“boost” : 14.0

}

}

],

“adjust_pure_negative” : true,

“boost” : 1.0

}

},

{

“bool” : {

“must” : [

{

“query_string” : {

“query” : “12”,

“default_field” : “parentId”,

“fields” : [ ],

“type” : “best_fields”,

“default_operator” : “or”,

“max_determinized_states” : 10000,

“enable_position_increments” : true,

“fuzziness” : “AUTO”,

“fuzzy_prefix_length” : 0,

“fuzzy_max_expansions” : 50,

“phrase_slop” : 0,

“escape” : false,

“auto_generate_synonyms_phrase_query” : true,

“fuzzy_transpositions” : true,

“boost” : 9.0

}

}

],

“adjust_pure_negative” : true,

“boost” : 1.0

}

},

{

“bool” : {

“must” : [

{

“query_string” : {

“query” : “1”,

“default_field” : “manual_type”,

“fields” : [ ],

“type” : “best_fields”,

“default_operator” : “or”,

“max_determinized_states” : 10000,

“enable_position_increments” : true,

“fuzziness” : “AUTO”,

“fuzzy_prefix_length” : 0,

“fuzzy_max_expansions” : 50,

“phrase_slop” : 0,

“escape” : false,

“auto_generate_synonyms_phrase_query” : true,

“fuzzy_transpositions” : true,

“boost” : 9.0

}

}

],

“adjust_pure_negative” : true,

“boost” : 1.0

}

},

{

“bool” : {

“must” : [

{

“query_string” : {

“query” : “1”,

“default_field” : “usage_scenarios_type”,

“fields” : [ ],

“type” : “best_fields”,

“default_operator” : “or”,

“max_determinized_states” : 10000,

“enable_position_increments” : true,

“fuzziness” : “AUTO”,

“fuzzy_prefix_length” : 0,

“fuzzy_max_expansions” : 50,

“phrase_slop” : 0,

“escape” : false,

“auto_generate_synonyms_phrase_query” : true,

“fuzzy_transpositions” : true,

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
Springcloudalibaba整合es!实现相关性排序,集成完代码真香,2024年程序员学习,elasticsearch,java,前端
Springcloudalibaba整合es!实现相关性排序,集成完代码真香,2024年程序员学习,elasticsearch,java,前端
Springcloudalibaba整合es!实现相关性排序,集成完代码真香,2024年程序员学习,elasticsearch,java,前端
Springcloudalibaba整合es!实现相关性排序,集成完代码真香,2024年程序员学习,elasticsearch,java,前端
Springcloudalibaba整合es!实现相关性排序,集成完代码真香,2024年程序员学习,elasticsearch,java,前端
Springcloudalibaba整合es!实现相关性排序,集成完代码真香,2024年程序员学习,elasticsearch,java,前端

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
Springcloudalibaba整合es!实现相关性排序,集成完代码真香,2024年程序员学习,elasticsearch,java,前端

总结

面试难免让人焦虑不安。经历过的人都懂的。但是如果你提前预测面试官要问你的问题并想出得体的回答方式,就会容易很多。

此外,都说“面试造火箭,工作拧螺丝”,那对于准备面试的朋友,你只需懂一个字:刷!

给我刷刷刷刷,使劲儿刷刷刷刷刷!今天既是来谈面试的,那就必须得来整点面试真题,这不花了我整28天,做了份“Java一线大厂高岗面试题解析合集:JAVA基础-中级-高级面试+SSM框架+分布式+性能调优+微服务+并发编程+网络+设计模式+数据结构与算法等”

Springcloudalibaba整合es!实现相关性排序,集成完代码真香,2024年程序员学习,elasticsearch,java,前端

且除了单纯的刷题,也得需准备一本【JAVA进阶核心知识手册】:JVM、JAVA集合、JAVA多线程并发、JAVA基础、Spring 原理、微服务、Netty与RPC、网络、日志、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB、Cassandra、设计模式、负载均衡、数据库、一致性算法、JAVA算法、数据结构、加密算法、分布式缓存、Hadoop、Spark、Storm、YARN、机器学习、云计算,用来查漏补缺最好不过。

Springcloudalibaba整合es!实现相关性排序,集成完代码真香,2024年程序员学习,elasticsearch,java,前端

自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-lA7vE2sS-1711789656756)]
[外链图片转存中…(img-cYlAQ8vo-1711789656756)]
[外链图片转存中…(img-Z1KQEZeS-1711789656757)]
[外链图片转存中…(img-bjoAIAZ8-1711789656757)]
[外链图片转存中…(img-qb3VRynT-1711789656758)]
[外链图片转存中…(img-Ghr0GHxC-1711789656758)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-ML8bVRP0-1711789656758)]

总结

面试难免让人焦虑不安。经历过的人都懂的。但是如果你提前预测面试官要问你的问题并想出得体的回答方式,就会容易很多。

此外,都说“面试造火箭,工作拧螺丝”,那对于准备面试的朋友,你只需懂一个字:刷!

给我刷刷刷刷,使劲儿刷刷刷刷刷!今天既是来谈面试的,那就必须得来整点面试真题,这不花了我整28天,做了份“Java一线大厂高岗面试题解析合集:JAVA基础-中级-高级面试+SSM框架+分布式+性能调优+微服务+并发编程+网络+设计模式+数据结构与算法等”

[外链图片转存中…(img-wOKkBFQr-1711789656759)]

且除了单纯的刷题,也得需准备一本【JAVA进阶核心知识手册】:JVM、JAVA集合、JAVA多线程并发、JAVA基础、Spring 原理、微服务、Netty与RPC、网络、日志、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB、Cassandra、设计模式、负载均衡、数据库、一致性算法、JAVA算法、数据结构、加密算法、分布式缓存、Hadoop、Spark、Storm、YARN、机器学习、云计算,用来查漏补缺最好不过。

[外链图片转存中…(img-Bq6CQMZm-1711789656759)]文章来源地址https://www.toymoban.com/news/detail-855466.html

到了这里,关于Springcloudalibaba整合es!实现相关性排序,集成完代码真香的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 原生语言操作和spring data中RestHighLevelClient操作Elasticsearch,索引,文档的基本操作,es的高级查询.查询结果处理. 数据聚合.相关性系数打分

    ​ Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。充分利用Elasticsearch的水平伸缩性,能使数据在生产环境变得更有价值。Elasticsearch 的实现原理主要分为以下几个步骤,首先用户将数据提交到Elasti

    2024年02月05日
    浏览(59)
  • 【hive】相关性函数进行相关性分析

    在Hive SQL中,使用类似的相关性函数进行相关性分析。常见的相关性函数包括CORR、COVAR_POP、COVAR_SAMP、STDDEV_POP、STDDEV_SAMP等。 举个例子,假设有一个表格sales,其中包含两列数据 sales_amt 和 advertising_amt ,我们可以使用CORR函数来计算这两列数据的相关性: 这将返回一个值,表示

    2024年02月21日
    浏览(33)
  • 表达矩阵任意两个基因相关性分析 批量相关性分析 tcga geo 矩阵中相关性强的基因对 基因相关性 ecm matrisome与gpx3

    使用场景 1.已经确定研究的基因,但是想探索他潜在的功能,可以通过跟这个基因表达最相关的基因来反推他的功能,这种方法在英语中称为 guilt of association,协同犯罪 。 2.我们的注释方法依赖于TCGA大样本,既然他可以注释基因,那么任何跟肿瘤相关的基因都可以被注释,

    2024年02月01日
    浏览(44)
  • Pearson相关性分析& plot绘图(相关性系数柱状图、绘制非空值数量柱状图)

    Pearson相关性分析是一种用于检测两个变量之间线性关系强度的统计方法,其结果介于-1和1之间。一个相关系数为1表示完全正相关,-1表示完全负相关,0则表示没有线性关系。 Pearson相关性分析假设数据来自正态分布,并且对异常值敏感。

    2024年02月09日
    浏览(28)
  • R语言使用gclus包的cpairs函数可视化散点图矩阵(包含多个变量的散点图)、可视化变量之间的相关性、使用order.single函数重新排序对象,使相似的对象相邻

    目录 R语言使用gclus包的cpairs函数可视化散点图矩阵(包含多个变量的散点图)、可视化变量之间的相关性、使用order.single函数重新排序对象,使相似的对象相邻 仿真数据

    2024年02月03日
    浏览(34)
  • 相关性(correlation)

    给定两个随机变量, X X X 和 Y Y Y ,则 X X X 和 Y Y Y 之间的(皮尔逊)相关性定义为: Corr ( X , Y ) = Cov ( X , Y ) Var ( X ) ⋅ Var ( Y ) , text{Corr}(X, Y) = frac{text{Cov}(X, Y)}{sqrt{text{Var}(X)} cdot sqrt{text{Var}(Y)}}, Corr ( X , Y ) = Var ( X ) ​ ⋅ Var ( Y ) ​ Cov ( X , Y ) ​ , 其中 X , Y ∈ R X, Y in

    2023年04月09日
    浏览(48)
  • 常见的相关性分析

    方差分析和相关性分析都是描述特征之间的关系的统计方法,但它们关注的方面略有不同。 方差分析主要用于研究一个或多个自变量对因变量的影响,即研究因素之间的差异性。通过比较不同组之间的方差,可以确定哪些因素对结果变量的影响比较重要,以及不同组之间的显

    2024年02月11日
    浏览(32)
  • 相关性分析和热图绘制

    一、什么是相关性分析? 相关性分析是指对两个或多个具备相关性的变量元素进行分析,从而衡量两个变量因素的相关密切程度。相关性的元素之间需要存在一定的联系或者概率才可以进行相关性分析。在组学测序(如转录组)中需设置多个生物学重复,而对多个生物学重复

    2024年02月10日
    浏览(31)
  • 数学建模:相关性分析

    🔆 文章首发于我的个人博客:欢迎大佬们来逛逛 Pearson Spearman Kendall tua-b t检验(t-test)临界值表-t检验表.xls T检验代码: myTtest005.m 相关性分析及SPSS软件操作.pdf

    2024年02月09日
    浏览(31)
  • LA@向量组线性相关性

    线性相关性是向量组的一个重要属性 线性相关 给定向量组 A : α 1 , α 2 , ⋯   , α m A:alpha_1,alpha_2,cdots,alpha_m A : α 1 ​ , α 2 ​ , ⋯ , α m ​ ,若存在 m m m 个 不全为 0 不全为0 不全为 0 的数 k 1 , k 2 , ⋯   , k m k_1,k_2,cdots,k_m k 1 ​ , k 2 ​ , ⋯ , k m ​ ,使得: ∑ i = 1 m k i α i

    2024年02月11日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包