0
点赞
收藏
分享

微信扫一扫

es获取指定字段、or查询、高亮加标签


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;
}

 

举报

相关推荐

0 条评论