现在我这里有两个文档内容如下,都是自己随便复制下来做测试的 这是第一个文档: 这是第二个文档:
这是我做的测试:
@Test public void essearchAl88() throws UnknownHostException { Settings settings=Settings.builder().put(“cluster.name”, “cluster-elasticsearch-prod”).build(); TransportClient client=new PreBuiltTransportClient(settings) .addTransportAddress(new TransportAddress(InetAddress.getByName(“192.168.1.109”), 9300)); String filekeyword=“编码心情”; BoolQueryBuilder builder = QueryBuilders.boolQuery().should(QueryBuilders.multiMatchQuery(filekeyword, “FileName”)).should(QueryBuilders.multiMatchQuery(filekeyword, “User_ID”)).should(QueryBuilders.multiMatchQuery(filekeyword, “attachment.content”)); HighlightBuilder field = new HighlightBuilder().field(“FileName”).field(“User_ID”).field(“attachment.content”).fragmentSize(10).numOfFragments(3).noMatchSize(150); SearchResponse response=client.prepareSearch(“tgdsm”) .setTypes(“fileinfo”) .highlighter(field) .setQuery(builder) .get(); SearchHits hits = response.getHits(); for (SearchHit searchHit : hits) { Map<String, HighlightField> highlightFields = searchHit.getHighlightFields(); HighlightField highlightField1 = highlightFields.get(“FileName”); if(highlightField1!=null) { Text[] fragments1 = highlightField1.getFragments(); for (Text text : fragments1) { System.out.println(“1”+text); } } HighlightField highlightField2 = highlightFields.get(“User_ID”); if(highlightField2!=null) { Text[] fragments2 = highlightField2.getFragments(); for (Text text : fragments2) { System.out.println(“2”+text); } } HighlightField highlightField3 = highlightFields.get(“attachment.content”); if(highlightField3!=null) { Text[] fragments3 = highlightField3.getFragments(); for (Text text : fragments3) { System.out.println(“3”+text); } } System.out.println("----------------------------------"); } } 这是测试的图片进行标注下 下面是具体的设置这几个属性显示的情况: 第一种情况没有设置 默认的情况 它显示的结果是,搜索出有关键字的字段高亮后,其他字段没有任何显示 第二种情况:将fragmentSize设置为10 之后的显示,长度变小 第三种情况:把numOfFragments设置为1 结果就只有一个片段了:
第四种情况:将noMatchSize设置进来 其他没有高亮的字段也一并显示出来了