给自己看的,要是忘了就来这里找。
private SearchSourceBuilder assembleSearchBuilder(String anchor, List<String> channels, long rangeMin, long rangeMax, int batchSize, String sortFiled) {
BoolQueryBuilder builder = QueryBuilders.boolQuery();
RangeQueryBuilder publishTime = QueryBuilders.rangeQuery(VocDataConstants.PUBLISH_TIME_KEY);
publishTime.gte(rangeMin);
publishTime.lt(rangeMax);
builder.must(publishTime);
QueryBuilder content = QueryBuilders.matchPhraseQuery("content", anchor);
builder.must(content);
// channel 中有多个值,“或”的关系用“should”。
BoolQueryBuilder channelQueryBuilder = new BoolQueryBuilder();
for(String channel: channels){
channelQueryBuilder.should(QueryBuilders.matchPhraseQuery("channel",channel));
}
builder.must(channelQueryBuilder);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder().trackTotalHits(true);
searchSourceBuilder.query(builder);
searchSourceBuilder.size(batchSize);
searchSourceBuilder.sort(SortBuilders.fieldSort(sortFiled).order(SortOrder.ASC));
log.info("query condition: " + builder);
return searchSourceBuilder;
}