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

wordpress能仿站吗一元手游平台app

wordpress能仿站吗,一元手游平台app,网络推广网站优化,郑州网站推广价格注意!!!博主只在测试环境试了一下,没有发到生产环境跑。因为代码还没写完客户说不用弄了( •̩̩̩̩_•̩̩̩̩ ) 也好,少个功能少点BUG 使用from size的时候发现存在max_result_window10000的限制&…

注意!!!博主只在测试环境试了一下,没有发到生产环境跑。因为代码还没写完客户说不用弄了( •̩̩̩̩_•̩̩̩̩ ) 也好,少个功能少点BUG

使用from + size的时候发现存在max_result_window=10000的限制,于是研究使用别的方法,最终想出个歪招来实现深度分页跳页。

1、三种分页方式比较

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、实现过程

  • BaseEsMapper构建查询条件
  • RestHighLevelClient实现scroll大分页滚动查询
  • 判断是否跨页,如果跨页滚动拿到两页数据
  • 根据前端分页参数进行数据截取返回

3、实现代码

引入依赖

<dependency><groupId>org.dromara.easy-es</groupId><artifactId>easy-es-boot-starter</artifactId><version>2.0.0</version>
</dependency>
<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-client</artifactId><version>7.6.2</version>
</dependency>
<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.6.2</version>
</dependency>

SearchResult

import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import lombok.Data;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;@Data
public class SearchResult<T> implements Serializable {private int total;private List<DocBaseEntity<T>> source = new ArrayList<>();private JSONObject aggregations;private String scrollId;public void addData(DocBaseEntity<T> obj){source.add(obj);}public List<T> getDatas(){return source.stream().map(DocBaseEntity::getDatas).collect(Collectors.toList());}public void addDatas(List<DocBaseEntity<T>> objs){source.addAll(objs);}public void setTotal(Object total){this.total = Integer.parseInt(String.valueOf(total));}public JSONObject toJSONObject(){return JSONUtil.parseObj(this,true);}
}

DocBaseEntity

import cn.hutool.json.JSONObject;
import lombok.Data;
import org.elasticsearch.search.SearchHit;
import java.io.Serializable;@Data
public class DocBaseEntity<T> implements Serializable {private String _index;private String _type;private String _id;private T datas;public DocBaseEntity(SearchHit data) {this._index = data.getIndex();this._type = data.getType();this._id = data.getId();}public DocBaseEntity(JSONObject jsonHits){this._index = jsonHits.getStr("_index");this._type = jsonHits.getStr("_type");this._id = jsonHits.getStr("_id");}public T getDatas(){return datas;}}

RestClientConfig

import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class RestClientConfig {@Value("${elasticsearch.clientIps}")private String clientIps;@Value("${elasticsearch.httpPort}")private int httpPort;@Value("${elasticsearch.username}")private String username;@Value("${elasticsearch.password}")private String password;private HttpHost[] getHttpHosts(String clientIps, int esHttpPort) {String[] clientIpList = clientIps.split(",");HttpHost[] httpHosts = new HttpHost[clientIpList.length];for (int i = 0; i < clientIpList.length; i++) {httpHosts[i] = new HttpHost(clientIpList[i], esHttpPort, "http");}return httpHosts;}/*** 创建带HTTP Basic Auth认证rest客户端*/@Beanpublic RestHighLevelClient restHighLevelClient() {CredentialsProvider credentialsProvider = new BasicCredentialsProvider();credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(username, password));return new RestHighLevelClient(RestClient.builder(getHttpHosts(clientIps, httpPort)).setHttpClientConfigCallback((HttpAsyncClientBuilder httpAsyncClientBuilder) -> httpAsyncClientBuilder.setDefaultCredentialsProvider(credentialsProvider)));}
}

滚动查询方法

@Autowired
private RestHighLevelClient restHighLevelClient;/*** 滚动查询* @param indexName* @param pageNo* @param pageSize* @param scrollId* @param resultObj* @param wrapper* @param <T>* @return* @throws IOException*/
public <T> SearchResult<T> scrollSearchElasticSearchDatas(String indexName,int pageNo,int pageSize,String scrollId,Class<T> resultObj,LambdaEsQueryWrapper<ES实体类Bean> wrapper) throws IOException {SearchSourceBuilder searchSourceBuilder = rdsBookCommonDetailEsMapper.getSearchSourceBuilder(wrapper);searchSourceBuilder.size(pageSize);SearchRequest searchRequest = new SearchRequest(indexName);searchRequest.source(searchSourceBuilder);//设定scroll失效时长Scroll scroll = new Scroll(TimeValue.timeValueMinutes(3));searchRequest.scroll(scroll);SearchResponse searchResponse = null;if(StrUtil.isEmpty(scrollId)){searchResponse = executSearch(searchRequest);String tempscrollId = searchResponse.getScrollId();SearchScrollRequest searchScrollRequest = new SearchScrollRequest(tempscrollId);searchScrollRequest.scroll(scroll);for (int i = 0; i < (pageNo -1); i++) {searchResponse = scrollSearch(searchScrollRequest);}scrollId = tempscrollId;}else {SearchScrollRequest searchScrollRequest = new SearchScrollRequest(scrollId);searchResponse = scrollSearch(searchScrollRequest);}//构建结果SearchResult<T> result = createSearchResult(searchResponse,resultObj);result.setScrollId(scrollId);return result;
}/*** 执行查询*/
private SearchResponse executSearch(SearchRequest searchRequest)     {SearchResponse searchResponse = null;try{searchResponse = restHighLevelClient.search(searchRequest,RequestOptions.DEFAULT);}catch(Exception e){//异常处理}return searchResponse;
}/*** 滚动查询执行* @param searchScrollRequest* @return*/
private  SearchResponse scrollSearch(SearchScrollRequest searchScrollRequest){SearchResponse searchResponse = null;try{searchResponse = restHighLevelClient.scroll(searchScrollRequest,RequestOptions.DEFAULT);}catch(Exception e){//异常处理}return searchResponse;
}/*** 构建目标结果* @param response 返回参数* @param resultObj 类对象* @param <T>* @return*/
private <T> SearchResult<T> createSearchResult(SearchResponse response,Class<T> resultObj){SearchResult<T> resultMap = new SearchResult<>();SearchHit[] datas = response.getHits().getHits();for(SearchHit data:datas){DocBaseEntity<T> temp = new DocBaseEntity<>(data);temp.setDatas(JSONUtil.toBean(JSONUtil.parseObj(data.getSourceAsMap()),resultObj));resultMap.addData(temp);}resultMap.setTotal(response.getHits().getTotalHits().value);return resultMap;
}/*** 关闭scroll* @param scrollId* @throws IOException*/
private void clearScrollSession(String scrollId) throws IOException {if (scrollId != null) {ClearScrollRequest clearScrollRequest = new ClearScrollRequest();clearScrollRequest.addScrollId(scrollId);ClearScrollResponse clearScrollResponse = restHighLevelClient.clearScroll(clearScrollRequest, RequestOptions.DEFAULT);clearScrollResponse.isSucceeded();}
}

使用

LambdaEsQueryWrapper<ES实体类Bean> wrapper = new LambdaEsQueryWrapper<>();
wrapper.eqxxx
...构建各种查询条件
// 游标id
String scrollId = "";
// 第一次查询
SearchResult<ES实体类Bean> firstSearchResult = null;
// 第二次查询
SearchResult<ES实体类Bean> secondSearchResult = null;
// 每次滚动查询5000条数据,根据前端传的分页参数决定要滚动到哪一页
int maxPage = ((searchCommonDetaiVo.getCurrentPage() * searchCommonDetaiVo.getPageSize()) / 5000) + 1;
try {firstSearchResult = scrollSearchElasticSearchDatas("IndexName", maxPage, 5000, scrollId, ES实体类Bean.class, wrapper);scrollId = firstSearchResult.getScrollId();
} catch (IOException e) {e.printStackTrace();
}
// 判断是否跨页
if (searchCommonDetaiVo.getPageSize() > (searchCommonDetaiVo.getCurrentPage() * searchCommonDetaiVo.getPageSize()) % 5000) {try {secondSearchResult = scrollSearchElasticSearchDatas("IndexName", maxPage-1, 5000, scrollId, ES实体类Bean.class, wrapper);} catch (IOException e) {e.printStackTrace();}
}
// TODO 根据前端分页参数截取数据返回
try {clearScrollSession(scrollId);
} catch (IOException e) {log.info("游标清理失败");e.printStackTrace();
}
http://www.khdw.cn/news/66610.html

相关文章:

  • 做网站属于广告费吗从事网络销售都有哪些平台呢
  • 莱芜如何选择网站建设拉新app渠道
  • 网站搜索引擎怎样做香港seo公司
  • 网站到期只续域名不续空间能打开吗农业推广
  • 如何用dw做php网站代码百度推广后台管理
  • 网站 栏目添加 文章不显示湖州网站建设制作
  • 用模版做网站的好处和坏处上海网站排名优化怎么做
  • 汕头网站设计电话网站怎么注册
  • 如何网站做百度推广seo效果检测步骤
  • 个人网站设计与实现源码广告推广系统
  • 查看网站是否收录公司培训
  • 宝安建网站外包短视频营销方式有哪些
  • 淘宝客网站html个人建网站需要多少钱
  • 如何在工商局网站上做网登seo排名优化是什么
  • 大型网站开发 书籍谷歌搜索引擎网页版入口
  • 工业智能科技网站设计公司网站seo公司
  • 保定商城网站建设网络推广外包
  • 网赚类型网站建设怎样通过网络销售自己的产品
  • 电子商务网站建设应用优化网站性能
  • 扬中网站推广报价2022最近十大的新闻热点
  • 学做网站论坛vip学员码网球排名即时最新排名
  • 未来软件网站建设百度收录排名
  • 建设学校网站的需求分析网站排名优化软件
  • 太原网站推广排名怎么推广自己的产品
  • 注册深圳公司需要多少钱win7最好的优化软件
  • 建站abc代理登陆广东互联网网络营销推广
  • 自学网站建设百度网址导航主页
  • 做几何图形和网站seo白帽优化
  • 网站ico设计网站访问量排行榜
  • 网站是先备案还是先做网站广东省各城市疫情搜索高峰进度