大家好,我是小悟
ElasticSearch是一个分布式的开源搜索和分析引擎,适用于所有类型的数据,包括文本、数字、地理空间、结构化和非结构化数据。
Elasticsearch 以其简单的 REST 风格 API、分布式特性、速度和可扩展性而闻名,是 Elastic Stack 的核心组件;Elastic Stack 是适用于数据采集、充实、存储、分析和可视化的一组开源工具。
【资料图】
人们通常将 Elastic Stack 称为 ELK Stack(代指 Elasticsearch、Logstash 和 Kibana),目前 Elastic Stack 包括一系列丰富的轻量型数据采集代理,这些代理统称为 Beats,可用来向 Elasticsearch 发送数据。
这篇内容主要来说说SpringBoot整合elasticsearch存储抖音短视频数据,使得查询海量视频数据变得又快又顺畅。通过接口获取到抖音短视频数据时,调用save方法存储到elasticsearch。然后前端再调用pageQuery方法查询数据回显。
1、pom文件
引入elasticsearch依赖
org.springframework.boot spring-boot-starter-data-elasticsearch
2、Config文件
SpringBoot方便的地方就是在于可以自动装配,几个注解就搞定了传统SSM那种繁琐的xml配置,@Configuration,@AutoConfigureBefore,@EnableCaching。
@AutoConfigureBefore(RedisConfig.class)@EnableCachingpublic class ElasticConfig { @PostConstruct void init() { System.setProperty("es.set.netty.runtime.available.processors", "false"); } @Bean(name = "elasticsearchTemplate") public ElasticsearchTemplate elasticsearchTemplate(Client client, ElasticsearchConverter converter) { try { return new ElasticsearchTemplate(client, converter); } catch (Exception ex) { throw new IllegalStateException(ex); } } @Bean public ElasticsearchConverter elasticsearchConverter( SimpleElasticsearchMappingContext mappingContext) { return new MappingElasticsearchConverter(mappingContext); } @Bean public SimpleElasticsearchMappingContext mappingContext() { return new SimpleElasticsearchMappingContext(); }}
注意,如果你的项目已经配置了redis,务必给AutoConfigureBefore这个注解传一个你的redis配置类,告诉spring,要在redis配置前先配置装载Elastic,否则会报错。
3、application.yml文件
在application.yml文件写以下几行
data: elasticsearch: cluster-name: xxx-elastic cluster-nodes: 服务器ip地址:9300
注意,cluster-name的值要和config/elasticsearch.yml里面写的一致,如果config/elasticsearch.yml里面network.host是0.0.0.0,那么表示可以让任何计算机节点访问到。配置文件里端口是9200,这边是9300,这是因为9200是http访问的端口,9300是Java访问的端口,切记不要写错了哦。
做完elasticsearch的基本配置后,就可以尽情的撸接口了。
4、Repository
创建Repository,继承ElasticsearchRepository,类似jpa。这样简单的CRUD就有了
public interface EsHotSentenceVideoRepository extends ElasticsearchRepository {}
5、接口Service
public interface EsHotSentenceVideoService { HotSentenceVideoEntity save(HotSentenceVideoEntity entity); void delete(HotSentenceVideoEntity entity); void deleteAll(); Iterable getAll(); List getByTitle(String title); Page pageQuery(Integer pageNo, Integer pageSize); Page pageQuery(Integer pageNo, Integer pageSize, String keyWord,String startTime,String endTime);}
6、实现类ServiceImpl
@Service("esHotSentenceVideoService")public class EsHotSentenceVideoServiceImpl implements EsHotSentenceVideoService { @Autowired private EsHotSentenceVideoRepository esHotSentenceVideoRepository; @Override public HotSentenceVideoEntity save(HotSentenceVideoEntity entity) { return esHotSentenceVideoRepository.save(entity); } @Override public void delete(HotSentenceVideoEntity entity) { esHotSentenceVideoRepository.delete(entity); } @Override public void deleteAll() { esHotSentenceVideoRepository.deleteAll(); } @Override public Iterable getAll() { return esHotSentenceVideoRepository.findAll(); } @Override public List getByTitle(String title) { List list = new ArrayList<>(); MatchQueryBuilder matchQueryBuilder = new MatchQueryBuilder("title", title); Iterable iterable = esHotSentenceVideoRepository.search(matchQueryBuilder); iterable.forEach(e->list.add(e)); return list; } @Override public Page pageQuery(Integer pageNo, Integer pageSize) { SearchQuery searchQuery = new NativeSearchQueryBuilder() .withPageable(PageRequest.of(pageNo, pageSize)) .build(); return esHotSentenceVideoRepository.search(searchQuery); } /** * @param pageNo * @param pageSize * @param keyWord * @param startTime * @param endTime * @return */ @Override public Page pageQuery(Integer pageNo, Integer pageSize, String keyWord,String startTime,String endTime) { Pageable pageable = PageRequest.of(pageNo, pageSize); NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder(); //分页 nativeSearchQueryBuilder.withPageable(pageable); //过滤 if (StringUtils.isNotEmpty(startTime) && StringUtils.isNotEmpty(endTime)) { BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); Long startTimeLong = DateUtils.strToLong(startTime); Long endTimeLong = DateUtils.strToLong(endTime); boolQueryBuilder.must(QueryBuilders.rangeQuery("publicTime").from(startTimeLong).to(endTimeLong)); nativeSearchQueryBuilder.withFilter(boolQueryBuilder); } //搜索 if (StringUtils.isNotEmpty(keyWord)) { nativeSearchQueryBuilder.withQuery(QueryBuilders.matchPhraseQuery("sentence",keyWord)); } nativeSearchQueryBuilder.withSort(SortBuilders.fieldSort("diggCount").order(SortOrder.DESC)); NativeSearchQuery searchQuery = nativeSearchQueryBuilder.build(); return esHotSentenceVideoRepository.search(searchQuery); }}
7、总结
查询速度,一个字,快,两个字,很快,三个字,超级快,优越性不仅体现在速度上,更值得一提的是ES还可以做分词检索,很方便。
您的一键三连,是我更新的最大动力,谢谢
山水有相逢,来日皆可期,谢谢阅读,我们再会
我手中的金箍棒,上能通天,下能探海
标签:
- 【ES三周年】SpringBoot整合elasticsearch存储抖音短视频数据实践
- 天天观察:企业汇算清缴怎么做(汇算清缴怎么做)
- 润康出新版啦?假消息!美好蕴育润康从未改变
- 天天热头条丨三星Zfold3会采用屏下技术吗
- 当前热文:鸡爪子做法简单又好吃(鸡爪子做法)
- 实时:安满孕妇奶粉怎么样
- 最新资讯:网上购物怎么操作(怎样在网上购物)
- 天天观天下!清明节的画(清明节的画简单又好看)
- 焦点速递!诺基亚925如何装手机卡(诺基亚925怎么样)
- 视焦点讯!爱+100年(爱1)
- 环球快看点丨云任务自动刷步(云任务)
- 每日精选:荣耀x20se屏幕是什么材质
- 【世界报资讯】2023东莞石排镇3000元购车补贴怎么领取?
- 三名在缅甸失联学生已移交中国警方 被陌生网友安排偷渡赴缅
- 咔叽探险队单机版(咔叽探险队)
- 如何解决qq加好友受限的问题?qq限制添加好友的解决方案
- 世界资讯:笔记本显卡能换吗(笔记本显卡可以换吗)
- 世界球精选!三名在缅甸失联学生已移交中国警方 被陌生网友安排偷渡赴缅
- 天天即时:上古卷轴5炉火攻略(上古卷轴5炉火)
- 热推荐:百度百科首页创建词条(百度百科创建词条)
- 人民保险和人寿保险是一家吗?人保和人寿保险有什么区别呢?
- 灵活就业社保应该怎么交?灵活就业社保一个月要交多少?
- 恒大万年禧增额终身寿险怎么样?恒大万年禧增额终身寿险值得购买吗?
- 银行信贷流程是什么样的?正规个人贷款业务流程环节包括哪几步?
- 企业购入土地使用权如何摊销?使用权资产需要计提折旧吗?
- 看点:80大寿ppt图片 80大寿ppt模板
- 预期收益型和净值型的区别是什么?定期开放净值型理财是基金吗?
- 公交车骚扰提醒(公交车骚扰)
- 实发工资和应发工资的区别是什么?实发工资是到手的工资吗?
- 世界快播:微型坦克游戏(微型坦克)
- 死期存款是什么意思?死期存款能否在到期前提取出?
- 世界视点!支付宝账单怎么看手机号码(支付宝账单怎么看)
- 外汇折算风险指的是指什么?外汇风险的类型有哪些?
- 阿尔特塔萨卡对没有戴帽感到失望 阿尔特塔周四踢了120分钟后情况艰难下半场我们本可做得更好
- 投资结构合理包括哪两重含义?投资结构指的是什么意思?
- 理财产品逾期兑付是什么意思?理财产品逾期兑付怎么办?
- 理财风险评估有效期是多久?理财产品风险是怎么划分的?
- 买银行理财产品需要多久做一次评估?理财评估应该怎么做?
- 现金类理财产品是什么?现金类理财产品具有什么特点?
- 理财产品冻结能否自动解除?购买理财产品生效前冻结资金有利息吗?
- 太平臻享金生终身寿险可靠吗?太平臻享金生终身寿险投保条件是什么?
- 众安保险的产品和服务有哪些?与其他保险公司相比众安保险有什么优势?
- 新华多倍保障重大疾病保险值得买吗?新华多倍保障重大疾病保险需要多少钱一年?
- 商业医疗保险一年大概需要多少钱?商业医疗保险怎么买最好?
- 农村合作医疗怎么在网上缴费?农村合作医疗缴费后多长时间生效?
- 职工养老保险交多少年就不用交了?职工养老保险退休后每月可以领多少?
- 养老金多少岁之后可以领取?养老金一个月领多少钱?
- 定期寿险一年一般交多少钱?定期寿险怎么买比较合适?
- 世界关注:长沙县住建局开展“政策服务进企业”活动
- 新基金老基金怎么选择?基金买入几天可以取出来?
- 基金认购和申购哪个好?不管认购还是进行申购,需要结合哪些因素考虑?
- 量子之歌旗下讲真学堂推出《国画训练营》 助力民众丰富精神世界
- 百度皮肤怎么设置(百度皮肤)
- 【世界时快讯】03月20日11时益阳最新疫情防疫管控出入政策通知
- 天天快看点丨周杰伦下载量(周杰伦下载)
- 【焦点热闻】03月20日11时岳阳最新疫情防疫管控出入政策通知
- 甘肃张掖遭沙尘暴袭击沙墙高达百米 甘肃省民勤县发布沙尘暴黄色预警(今日/头条)
- 新动态:美媒:知情人士称硅谷银行或将被拆分出售
- 天天即时:03月20日10时铜仁最新疫情防疫管控出入政策通知
- 资讯:03月20日10时遵义最新疫情防疫管控出入政策通知
- 环球观天下!03月20日10时黔西南最新疫情防疫管控出入政策通知
- 天天资讯:03月20日10时六盘水最新疫情防疫管控出入政策通知
- 麻将新手入门基本规则(麻将怎么打初学图解)
- 世界快资讯:夏普液晶电视机图片(夏普液晶电视好吗)
- 装十三是啥意思是什么(装十三)
- 全球热点评!2023杭州余杭数字消费券淘宝入口在哪里?
- 今亮点!本轮甲流高峰是否已过去?最新回应来了→
- 每日热议!本轮甲流高峰是否已过去?最新回应来了→
- 板栗去皮妙招内皮方法(板栗去皮)
- 海关总署回应集装箱空箱问题:2月下旬以来出口集装箱用箱量持续增长
- 海关总署回应集装箱空箱问题:2月下旬以来出口集装箱用箱量持续增长
- 云南发现新记录植物大花舟翅桐
- 2023直招军士预报名通道已开启!400余个专业可报
- 每日精选:跨境电商监管将有哪些新措施 海关总署回应→
- 云南发现新记录植物大花舟翅桐
- 快消息!怎样包粽子视频教程(粽子怎样包)
- 天天新消息丨文化和旅游部决定全年开展“四季村晚”活动 鼓励各地“村晚”常态化
- 跨境电商监管将有哪些新措施 海关总署回应→
- 环球速读:符文精金棒id(符文精金棒)
- 环球今亮点!全站仪的使用心得体会(全站仪的使用)
- 2023直招军士预报名通道已开启!400余个专业可报
- 国家老年大学开启线下第一课 800余名中老年人重返校园
- 文化和旅游部决定全年开展“四季村晚”活动 鼓励各地“村晚”常态化
- 讯息:国家老年大学开启线下第一课 800余名中老年人重返校园
- 动态焦点:硅谷银行倒闭暴美金融体系深层危机 硅谷银行破产原因
- 十年又十年——美国谎言将伊拉克推向战乱深渊
- 环球快播:蜂蜜什么时间喝最好能通便(蜂蜜什么时间喝最好)
- 荣耀50和一加9R哪个好
- 推动国民经济整体持续好转
- 【环球新视野】广东打出助企高质量发展“组合拳”
- 联通通话详单查询(联通查话费短信)
- 世界焦点!什么?个人退税可以多退几千?小心骗局新套路!
- 每日观察!win7系统中wmiprvse.exe占高cpu的详细处理步骤
- 环球头条:佩洛西批特朗普事在煽动骚乱 预言自己将被捕后特朗普现身露面摔跤锦标赛挥拳示意
- 通讯!国台办:大陆方面欢迎马英九先生来访
- 国台办:大陆方面欢迎马英九先生来访
- 精选!什么?个人退税可以多退几千?小心骗局新套路!
- 央行3月LPR报价公布:1年期3.65% 5年期以上4.3%
- 央行3月LPR报价公布:1年期3.65% 5年期以上4.3%
- 世界快资讯:迪士尼被曝大幅裁员!什么情况?