private List<TranTmESDO> getSearchTmList(List<Long> ttIds,String keywords,String lgAlias) {
String searchLgAlias="resultMap."+lgAlias;
BoolQueryBuilder builder = QueryBuilders.boolQuery();
builder.must(QueryBuilders.matchQuery("deleteFlag", DeleteFlagEnum.NOT_DELETE.getValue()));
builder.must(QueryBuilders.termsQuery("ttId",ttIds));
builder.must(
QueryBuilders.boolQuery()
.should(QueryBuilders.matchQuery("originString", keywords))
.should(QueryBuilders.matchQuery(searchLgAlias, keywords))
);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(builder);
String leftTag = constantConfig.getTmSearchHighlightLeftTag();
String rightTag = constantConfig.getTmSearchHighlightRightTag();
//高亮
HighlightBuilder highlightBuilder = new HighlightBuilder();
highlightBuilder.field("originString");
highlightBuilder.field(searchLgAlias);
highlightBuilder.requireFieldMatch(true);//多个高亮显示
highlightBuilder.preTags(leftTag);
highlightBuilder.postTags(rightTag);
searchSourceBuilder.highlighter(highlightBuilder);
String[] fields=new String[]{"originLgAlias","originString","projectId","projectName","resultMap","ttId"};
searchSourceBuilder.fetchSource(fields, null);
SearchResult result = null;
String queryStr = searchSourceBuilder.toString();
String index= TablesUtils.TRAN_TM_ES;
String type="_doc";
try {
Search search = new Search.Builder(queryStr)
.addIndex(index)
.addType(type)
.build();
result = jestClient.execute(search);
if (result == null) {
return null;
}
if (result.getResponseCode() != 200) {
log.error(result.getErrorMessage());
return null;
}
List<TranTmESDO> returnList=new ArrayList<>();
List<SearchResult.Hit<TranTmESDO, Void>> hits = result.getHits(TranTmESDO.class);
hits.forEach(h->{
Map<String, List<String>> highlight = h.highlight;
TranTmESDO source = h.source;
List<String> originStringList = highlight.get("originString");
if(Objects.nonNull(originStringList)&&originStringList.size()>0){
source.setOriginString(originStringList.get(0));
}
List<String> resultMapList = highlight.get(searchLgAlias);
if(Objects.nonNull(resultMapList)&&resultMapList.size()>0){
Map<String,Object> resultMap=new HashMap<>();
resultMap.put(lgAlias,resultMapList.get(0));
source.setResultMap(resultMap);
}
returnList.add(source);
});
return returnList;
} catch (Exception e) {
log.error("search", e);
}
return null;
}