分布式搜索Elasticsearch——搜索(二)

        前面提到如何进行搜索,并将SearchRequestBuilder的一些方法进行了列举,本文调用了SearchRequestBuilder的用于高亮的方法,处理了检索中的高亮问题:


		SearchResponse response1 = client.prepareSearch("user")
		        .setTypes("tb_person0", "tb_person1", "tb_person2", "tb_person3", "tb_person4")
		        .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
		        .setQuery(QueryBuilders.fieldQuery("name", "张三"))             // Query
		        .addHighlightedField("name")
		        .setHighlighterPreTags("<span style=\"color:red\">")
		        .setHighlighterPostTags("</span>")
		        .setFilter(FilterBuilders.rangeFilter("age").from(20).to(22))   // Filter
		        .setFrom(0).setSize(60).setExplain(true)
		        .execute()
		        .actionGet();
		
		SearchHits hits1 = response1.getHits();  
        for(SearchHit hit : hits1){  
			String json = hit.getSourceAsString();
			
			Person newPerson = mapper.readValue(json,
					Person.class);
			
            Map<String, HighlightField> result = hit.highlightFields();  
            HighlightField titleField = result.get("name");  
            Text[] titleTexts =  titleField.fragments();  
            
            String name = "";
            
            for(Text text : titleTexts){  
                name += text;
            }  
            newPerson.setName(name);
            
			System.out.println("name\t\t" + newPerson.getName());
			System.out.println("sex\t\t" + newPerson.getSex());
			System.out.println("age\t\t" + newPerson.getAge());
			System.out.println("isStudent\t\t" + newPerson.getIsStudent());

			
            System.out.println("--------------------------");  
        } 

        addHighlightedField(String fieldName)指明要进行高亮处理的Field;setHighlighterPreTags设定了高亮文字的前缀;setHighlighterPostTags设定了高亮文字的后缀。

        取得hit后,使用hit.highlightFields()取得结果中进行了高亮标识的域名-值对,然后对这些域名-域值对进行分析得到高亮的域结果。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值