public List<ChatSearch> search(String corpid, ChatSearchParam param) throws IOException {
String corpId = param.getCorpId();
List<ChatSearch> chatList = new ArrayList<>();
RestHighLevelClient esClient = esConfig.getESClient(corpId);
SearchRequest request = searchByEs(param);
SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
for (SearchHit hit : response.getHits().getHits()) {
chatList.add(JSONObject.parseObject(hit.getSourceAsString(), ChatSearch.class));
}
fill(corpId, chatList);
return chatList;
}
private SearchRequest searchByEs(ChatSearchParam param) {
String corpId = param.getCorpId();
//Build query
BoolQueryBuilder condition = QueryBuilders.boolQuery()
.must(QueryBuilders.termQuery("corpid", corpId))
.must(QueryBuilders.termQuery("chattype", 1))//0 means internal, 1 means external
.must(QueryBuilders.termQuery("msgtype", "text"))
.must(QueryBuilders.matchPhraseQuery("data", param.getContent()));
if (!StringUtils.isBlank(param.getEndTime())) {
condition.must(QueryBuilders.rangeQuery("msgtime").lte(param.getEndTime()));
}
if (!StringUtils.isBlank(param.getStartTime())) {
condition.must(QueryBuilders.rangeQuery("msgtime").gte(param.getStartTime()));
}
if (param.getFrom() != null) {
condition.must(QueryBuilders.termQuery("is_sales_send", param.getFrom()));
}
if (param.getGroup() != null) {
condition.must(QueryBuilders.termQuery("isgroup", param.getGroup()));
}
if (!CollectionUtils.isEmpty(param.getSalesIds())) {
condition.must(QueryBuilders.boolQuery()
.should(QueryBuilders.termsQuery("userid", param.getSalesIds()))
.should(QueryBuilders.termsQuery("talklist", param.getSalesIds()))
);
}
SearchSourceBuilder requestBuilder = new SearchSourceBuilder()
.query(condition)
.sort("msgtime", param.getOrder())
.size(param.getPageSize().intValue());
return new SearchRequest().indices("index_chat").types("doc").source(requestBuilder);
}