Commit 9615e793 authored by shiyu's avatar shiyu

es

parent 7279c75e
......@@ -184,7 +184,7 @@ public class SynCoinJob {
PageInfo<Item> pageInfo = itemDao.findPageExcludeFilter(coinRequestDto);
int totalPageNum = pageInfo.getPages();
logger.info("total page : {}, total : {}", totalPageNum, pageInfo.getTotal());
IntStream.rangeClosed(1, totalPageNum).parallel().forEach(i -> {
IntStream.rangeClosed(1, totalPageNum).forEach(i -> {
logger.info(">>>>>>>>>>>>>>>>> 当前同步数据的页码: {} 更新开始 <<<<<<<<<<<<<<<<<", i);
CoinRequestDto dto = new CoinRequestDto();
dto.setPage(i);
......@@ -192,11 +192,6 @@ public class SynCoinJob {
List<Item> itemList = itemDao.findListByPage(dto);
itemEsDao.create(itemList);
logger.info(">>>>>>>>>>>>>>>>> 页码 = {}, 同步es 成功 ! <<<<<<<<<<<<<<<<<", i);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
});
logger.info(">>>>>>>>>>>>>>>>>数据同步es 完成 SUCCESS!!!!! <<<<<<<<<<<<<<<<<");
} catch (Exception e) {
......
......@@ -8,6 +8,9 @@ import lombok.Data;
@JsonIgnoreProperties(ignoreUnknown = true)
public class ItemOfEs implements Entity {
private Long id;
/**
* 商品id
*/
......
package com.wwdz.ch.db.es;
import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.elasticsearch._types.SortOrder;
import co.elastic.clients.elasticsearch._types.query_dsl.MatchQuery;
import co.elastic.clients.elasticsearch._types.query_dsl.Query;
import co.elastic.clients.elasticsearch._types.*;
import co.elastic.clients.elasticsearch._types.aggregations.AggregationBuilders;
import co.elastic.clients.elasticsearch._types.analysis.Language;
import co.elastic.clients.elasticsearch._types.query_dsl.*;
import co.elastic.clients.elasticsearch.core.*;
import co.elastic.clients.elasticsearch.core.bulk.BulkOperation;
import co.elastic.clients.elasticsearch.core.bulk.CreateOperation;
import co.elastic.clients.elasticsearch.core.search.Hit;
import co.elastic.clients.elasticsearch.indices.CreateIndexResponse;
import co.elastic.clients.elasticsearch.indices.DeleteIndexResponse;
import co.elastic.clients.json.JsonData;
import co.elastic.clients.util.ObjectBuilder;
import com.fasterxml.jackson.databind.util.ArrayBuilders;
import com.wwdz.ch.db.bean.EsPageInfo;
import com.wwdz.ch.db.bean.ItemOfEs;
import com.wwdz.ch.db.domain.Item;
import com.wwdz.ch.db.dto.request.EsSearchRequestDto;
import com.xxdxxs.utils.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Repository;
import javax.annotation.Resource;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.SequenceInputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import java.util.stream.IntStream;
import java.util.stream.LongStream;
@Repository
public class ItemEsDao {
......@@ -29,6 +44,9 @@ public class ItemEsDao {
private final static String INDEX = "quanku_temp";
//商品来源是中国,所对应的编码
private final static List<String> CHINESE_SOURCE_LIST = Arrays.asList("1", "2", "3", "7", "8", "10", "11", "1000");
@Resource(name="clientByPasswd")
ElasticsearchClient elasticsearchClient;
......@@ -66,32 +84,79 @@ public class ItemEsDao {
EsPageInfo esPageInfo = null;
try {
List<ItemOfEs> list = new ArrayList<>();
/* //查询总条数
CountResponse countResponse = elasticsearchClient.count();
long total = countResponse.count();
logger.info(">>>>>>>>>> 数据总量 :{} <<<<<<<<<<", total);*/
int page = esSearchRequestDto.getPage();
int size = esSearchRequestDto.getSize();
int from = (page - 1) * size;
Query matchQuery = MatchQuery.of(m -> m
.field("name")
.query(esSearchRequestDto.getContent())
)._toQuery();
Query sourceTermQuery = TermQuery.of(t ->
t.field("source")
.value(2))._toQuery();
Query sourceTermQuery2 = TermQuery.of(t ->
t.field("source")
.value(7))._toQuery();
SearchRequest.Builder builder = new SearchRequest.Builder();
builder.index(INDEX);
builder.source(sourceBuild->sourceBuild.filter(f->f.includes("coin_id", "name", "price", "top_image_path")));
builder.query(matchQuery);
builder.from(from);
builder.source(sourceBuild->sourceBuild.filter(f->f.includes("id", "images", "name", "price")));
List<Query> sourceTypeQueryList = new ArrayList<>();
CHINESE_SOURCE_LIST.forEach(i -> {
Query query = TermQuery.of(t->t.field("sourceType").value(i))._toQuery();
sourceTypeQueryList.add(query);
});
Query shouldQuery = QueryBuilders.bool(q->q.should(sourceTypeQueryList));
BoolQuery.Builder build = QueryBuilders.bool().mustNot(sourceTermQuery).mustNot(sourceTermQuery2).must(shouldQuery);
if(StringUtils.hasLength(esSearchRequestDto.getContent())) {
Query matchQuery = MatchQuery.of(m -> m
.field("name")
.query(esSearchRequestDto.getContent())
)._toQuery();
build.must(matchQuery);
builder.from(from);
} else {
int num = 10000 - size;
Random random = new Random();
from = random.nextInt(num);
builder.from(from);
/* Script script = new Script.Builder(ScriptType.INLINE, "painless", "Math.random()", null).build();
ScriptSortBuilder scriptSortBuilder = new ScriptSortBuilder(script).type(ScriptSortType.NUMBER).order(SortOrder.DESC);
SearchRequest searchRequest = new SearchRequest().source(new SearchSourceBuilder()
.query(QueryBuilders.functionScoreQuery(QueryBuilders.matchAllQuery()).randomScore(script))
.sort(scriptSortBuilder)
.size(20));
builder.sort(ScriptSort.of(s -> s.type(ScriptSortType.Number).script(new Script("ss"))).order(SortOrder.Desc))));
logger.info(">>>>>>>>>>>>> script = {}", scriptSort.script().toString());*/
}
builder.query(build.build()._toQuery());
builder.size(size);
builder.sort(f -> f.field(o -> o.field("coin_id")
.order(SortOrder.Desc)));
/* builder.sort(f -> f.field(o -> o.field("coin_id")
.order(SortOrder.Desc)));*/
SearchRequest searchRequest = builder.build();
logger.info("查询语句 : {}", searchRequest.query());
SearchResponse<ItemOfEs> searchResponse = elasticsearchClient.search(searchRequest, ItemOfEs.class);
long total = searchResponse.hits().total().value();
logger.info("总数据量 : {}", total);
List<Hit<ItemOfEs>> hitList = searchResponse.hits().hits();
logger.info("====== getResponse : {}", searchResponse);
List<Long> idList = new ArrayList<>();
for (Hit<ItemOfEs> itemOfEsHit : hitList) {
ItemOfEs itemOfEs = itemOfEsHit.source();
list.add(itemOfEs);
idList.add(itemOfEs.getId());
}
logger.info("======== 随机返回的数据id : {}", idList);
esPageInfo = EsPageInfo.of(total, list, page, size);
} catch (Exception e) {
logger.error("ES 查询商品列表 error : {}", e);
......@@ -128,4 +193,5 @@ public class ItemEsDao {
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment