1. BoolQueryBuilder boolBuilder = QueryBuilders.boolQuery();
    2. {
    3. BoolQueryBuilder Builder = QueryBuilders.boolQuery();
    4. Builder.should(QueryBuilders.termQuery("isvalid", 1));
    5. boolBuilder.must(Builder);
    6. }
    7. {
    8. // 全文检索
    9. QueryStringQueryBuilder title = QueryBuilders.queryStringQuery(fullSearch);
    10. title.field("standard_name.text");
    11. boolBuilder.must(title);
    12. }
    13. SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
    14. sourceBuilder.query(boolBuilder);
    15. HighlightBuilder highlightBuilder = new HighlightBuilder();
    16. highlightBuilder.field("standard_name.text");//高亮的字段
    17. highlightBuilder.preTags("<span style='color:green'>");//前缀后缀
    18. highlightBuilder.postTags("</span>");
    19. // highlightBuilder.requireFieldMatch(true);//是否多个字段都高亮
    20. // highlightBuilder.numOfFragments(0);
    21. sourceBuilder.highlighter(highlightBuilder);
    22. sourceBuilder.explain(true);
    23. sourceBuilder.from(0);
    24. sourceBuilder.size(250);
    25. SearchRequest searchRequest = new SearchRequest(modelStandardRelationIndex);
    26. searchRequest.source(sourceBuilder);
    27. response = EsClientUtil.getClient().search(searchRequest, RequestOptions.DEFAULT);
    1. SearchHits hits = response.getHits();
    2. SearchHit[] searchHits = hits.getHits();
    3. for (SearchHit hit : searchHits) {
    4. Map<String, Object> sourceAsMap = hit.getSourceAsMap();
    5. ModelStandardEsVo bean = new ModelStandardEsVo();
    6. bean.setId((String) sourceAsMap.get("id"));
    7. bean.setModelChineseName((String) sourceAsMap.get("model_chinese_name"));
    8. bean.setModelIdentification((String) sourceAsMap.get("model_identification"));
    9. bean.setModelVersion((String) sourceAsMap.get("model_version"));
    10. bean.setStandardIdentification((String) sourceAsMap.get("standard_identification"));
    11. bean.setStandardVersion((String) sourceAsMap.get("standard_version"));
    12. Map<String, HighlightField> highlightFields = hit.getHighlightFields();
    13. {
    14. HighlightField field = highlightFields.get("standard_name.text");
    15. if (field != null) {
    16. Text[] fragments = field.fragments();
    17. String n_field = "";
    18. for (Text fragment : fragments) {
    19. n_field += fragment;
    20. }
    21. //高亮标题覆盖原标题
    22. sourceAsMap.put("standard_name", n_field);
    23. }
    24. }
    25. }