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

静态商城网页模板网站关键字排名优化

静态商城网页模板,网站关键字排名优化,汕头站扩建后比哪个站大,戴尔官方网站建设启示一、scroll说明和使用场景 scroll的使用场景:大数据量的检索和操作 scroll顾名思义,就是游标的意思,核心的应用场景就是遍历 elasticsearch中的数据; 通常我们遍历数据采用的是分页,elastcisearch还支持from size的…

一、scroll说明和使用场景

scroll的使用场景:大数据量的检索和操作

scroll顾名思义,就是游标的意思,核心的应用场景就是遍历 elasticsearch中的数据;

通常我们遍历数据采用的是分页,elastcisearch还支持from size的方式进行分页查询,使用 from and size 的深度分页,比如说 ?size=10&from=10000,因为 100,000 排序的结果必须从每个分片上取出并重新排序最后返回 10 条。这个过程需要对每个请求页重新进行提取+排序,效率很低,消耗很大,所以默认的最大可分页的数据是10000,超过10000是不建议的;

使用

通过在url末尾带上scroll=1m表示开启一个游标,1m表示游标的有效期为1分钟

POST /record/_search?scroll=1m
{"from": 0,"size": 20
}

返回结果中会把scroll的id带上,再次查询的时候,直接用scroll id查询即可

POST /_search/scroll
{"scroll" : "1m", "scroll_id" : "FGluY2x1ZGVfY29udGV4dF91dWlkDnF1ZXJ5VGhlbkZldGNoAhZuYmpMbVpwWFRUMnNFMUFFSHlSMHB3AAAAAALBy_0WUWxrNTRTaWNUcy1sOHQ0VUo5dzF6dxZoemFkZTlMeFQ4MmoyOW5SUG8ybE53AAAAAAN6ip8WMmk5TWZlQ21RQnFsNURwaXRzSGhCdw==" 
}

二、基于ElasticsearchRestTemplate的实现

这里我们定义了一个template如下,主要作用就是实现一个基于scroll的数据遍历模板,屏蔽开启scroll 以及 scroll遍历所有数据,通过Consumer<T>钩子函数进行数据处理

import lombok.extern.slf4j.Slf4j;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.data.elasticsearch.core.SearchHit;
import org.springframework.data.elasticsearch.core.SearchScrollHits;
import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;import java.util.List;
import java.util.concurrent.*;/*** scrollTemplate 模板,用于遍历整个Index的数据* @author xiuzhu* @Date 2023/7/28 13:12*/
@Slf4j
public class ElasticSearchScrollTemplate<T> {ExecutorService executorService = new ThreadPoolExecutor(1, 4,30,TimeUnit.SECONDS,new LinkedBlockingQueue<Runnable>(5),Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy());ElasticsearchRestTemplate elasticSearchRestTemplate;Class<T> cls;String indexName;public ElasticSearchScrollTemplate(ElasticsearchRestTemplate template,Class<T> cls,String indexName) {this.elasticSearchRestTemplate = template;this.cls = cls;this.indexName = indexName;}@FunctionalInterfacepublic interface Consumer<T> {public void accept(List<T> objects);}public void execute(Consumer<T> consumer) {//构建查询条件NativeSearchQueryBuilder query = new NativeSearchQueryBuilder();BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();query.withPageable(PageRequest.of(0, 300));query.withQuery(queryBuilder);//保留0.5分钟long scrollTimeInMillis = 30*1000;IndexCoordinates recordIndex = IndexCoordinates.of(indexName);SearchScrollHits<T> hits = elasticSearchRestTemplate.searchScrollStart(scrollTimeInMillis, query.build(), cls, recordIndex);// scrollIdString scrollId = hits.getScrollId();List<T> recordEntityList = hits.stream().map(SearchHit::getContent).toList();long total = 0L;log.info("================ began scroll index={} ====================", indexName);executorService.submit(()->{consumer.accept(recordEntityList);});total = total + recordEntityList.size();log.info("================  has scroll index={} total={} ====================", indexName, total);while (!hits.isEmpty()) {hits = elasticSearchRestTemplate.searchScrollContinue(scrollId, scrollTimeInMillis, cls, recordIndex);List<T> entities = hits.stream().map(SearchHit::getContent).toList();executorService.submit(()->{consumer.accept(entities);});total = total + entities.size();try {//给系统留GC时间,不然容易内存溢出Thread.sleep(300);} catch (InterruptedException e) {log.error("sleep error", e);}log.info("================  has scroll index={} total={} ====================", indexName, total);}log.info("================ end scroll index={} ====================", indexName);}
}

使用参考:

@Resource(name = "elasticSearchRestTemplate")ElasticsearchRestTemplate elasticsearchRestTemplate;new ElasticSearchScrollTemplate<>(elasticsearchRestTemplate,RecordEntity.class,"record")).execute((entities)->{entities.forEach(item->{//这里进行数据的处理,比如修改数据recordEntityService.save(item);log.info("tag update success record={} api={}", item.getId());});});

本文由mdnice多平台发布

http://www.zhongyajixie.com/news/45875.html

相关文章:

  • 外贸购物网站建设市场调研报告最佳范文
  • 医药网站文案编辑是怎么做的营销活动推广策划
  • 北京网站建设华网广州seo招聘信息
  • wordpress蜘蛛记录插件怎么优化自己网站的关键词
  • 网站建设的误区中国营销策划第一人
  • 佛山新网站建设公司百度推广官方网站登录入口
  • 中企动力做的网站山西太原百度快照什么意思
  • 女生做网站编辑好吗百度优化关键词
  • 网站开发手机模拟器辽宁和生活app下载安装
  • 网站禁止火车头采集百度竞价排名的利与弊
  • h5商城和小程序商城的区别点击排名优化
  • 濮阳家电网站建设公司建网站多少钱
  • 做纪念品网站品牌关键词优化哪家便宜
  • 视频网站怎么做服务器百度一下你就知道官网网页
  • 网站如何伪静态全国免费发布信息平台
  • 网站APP注册做任务营销渠道模式有哪些
  • 我想学习做网站国外免费建站网站搭建
  • 世界杯网站源码下载今日头条关键词工具
  • 渭南网站建设价格网上推广
  • 东莞网站建设效果信息流广告代理商排名
  • dedecms建设慕课网站茶叶营销策划方案
  • php语言 网站建设三只松鼠的软文范例
  • 做农业网站排名优化价格
  • 承建网站百度上如何发广告
  • 做加密网站全站加密的最低成本推手平台哪个靠谱
  • 动态网站用数据库怎么做百度seo网络营销书
  • 招商外包象山关键词seo排名
  • 去掉wordpressseo查询在线
  • 怎样做网站吸引客户市场推广和销售的区别
  • 高端网站建设公司排行竞价排名是什么