Commit aa1cec65 authored by shiyu's avatar shiyu

es根据id范围查询

parent bb4091f3
......@@ -65,6 +65,19 @@ public class ElasticsearchUtilTest {
}
@Test
public void findByRange() {
EsSearchRequestDto esSearchRequestDto = new EsSearchRequestDto();
esSearchRequestDto.setPage(1);
esSearchRequestDto.setSize(40);
esSearchRequestDto.setIdStart(100L);
esSearchRequestDto.setIdEnd(110L);
EsPageInfo esPageInfo = itemEsDao.findByRange(esSearchRequestDto);
logger.info("esPageInfo = {}", esPageInfo);
}
@Test
public void getCuewords() {
EsSearchRequestDto esSearchRequestDto = new EsSearchRequestDto();
......
......@@ -12,6 +12,8 @@ public class EsSearchRequestDto implements Entity {
private Map<String, String> paramMap;
private String content;
private Long idStart;
private Long idEnd;
private List<String> includes;
private String sortField;
private Boolean isDesc = true;
......
......@@ -8,6 +8,7 @@ import co.elastic.clients.elasticsearch.core.bulk.BulkOperation;
import co.elastic.clients.elasticsearch.core.bulk.CreateOperation;
import co.elastic.clients.elasticsearch.core.search.FieldCollapse;
import co.elastic.clients.elasticsearch.core.search.Hit;
import co.elastic.clients.json.JsonData;
import com.wwdz.ch.db.bean.EsPageInfo;
import com.wwdz.ch.db.bean.ItemOfEs;
import com.wwdz.ch.db.domain.Item;
......@@ -143,6 +144,83 @@ public class ItemEsDao {
public EsPageInfo findByRange(EsSearchRequestDto esSearchRequestDto) {
EsPageInfo esPageInfo = null;
try {
List<ItemOfEs> list = new ArrayList<>();
int page = esSearchRequestDto.getPage();
int size = esSearchRequestDto.getSize();
int from = (page - 1) * size;
SearchRequest.Builder builder = new SearchRequest.Builder();
builder.index(INDEX);
if (!CollectionUtils.isEmpty(esSearchRequestDto.getIncludes())) {
builder.source(sourceBuild->sourceBuild.filter(f->f.includes(esSearchRequestDto.getIncludes())));
}
List<FieldValue> sourceQueryList = new ArrayList<>();
SOURCE_LIST.forEach(i -> {
sourceQueryList.add(FieldValue.of(i));
});
Query sourceQuery = QueryBuilders.terms(s->s.field("source").terms(t->t.value(sourceQueryList)));
//展示待处理和已发布状态的商品
List<FieldValue> stateQueryList = new ArrayList<>();
stateQueryList.add(FieldValue.of(1));
stateQueryList.add(FieldValue.of(10));
Query stateQuery = QueryBuilders.terms(s->s.field("state").terms(t->t.value(stateQueryList)));
BoolQuery.Builder build = QueryBuilders.bool().filter(stateQuery).filter(sourceQuery);
Query wildcardQuery = WildcardQuery.of(w->w.field("images").value("*_*"))._toQuery();
build.filter(wildcardQuery);
Query isDeleteQuery = TermQuery.of(t->t.field("isDeleted").value(false))._toQuery();
build.filter(isDeleteQuery);
//只查询权限为公开的商品
Query viewPermissionQuery = TermQuery.of(t->t.field("viewPermission").value(0))._toQuery();
build.filter(viewPermissionQuery);
//查询非用户发布的
Query sourceTypeQuery = TermQuery.of(t->t.field("sourceType").value(1))._toQuery();
build.filter(sourceTypeQuery);
if(StringUtils.hasLength(esSearchRequestDto.getContent())) {
Query matchQuery = MatchQuery.of(m -> m
.field("name")
.query(esSearchRequestDto.getContent())
)._toQuery();
build.must(matchQuery);
}
Query rangeQuery = RangeQuery.of(r -> r.field("id")
.gte(JsonData.of(esSearchRequestDto.getIdStart()))
.lt(JsonData.of(esSearchRequestDto.getIdEnd())))._toQuery();
build.filter(rangeQuery);
builder.query(build.build()._toQuery());
builder.from(from);
builder.size(size);
SearchRequest searchRequest = builder.build();
logger.info("es查询语句 : {}", searchRequest.toString());
SearchResponse<ItemOfEs> searchResponse = elasticsearchClient.search(searchRequest, ItemOfEs.class);
long total = searchResponse.hits().total().value();
logger.info("总数据量 : {}, 耗时 : {}", total, searchResponse.took());
List<Hit<ItemOfEs>> hitList = searchResponse.hits().hits();
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);
}
return esPageInfo;
}
public void create(List<Item> itemList) {
// 批量添加数据
List<BulkOperation> opts = new ArrayList<>();
......
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