ElasticSearch(四)

来源:互联网 发布:dota2数据分析师 编辑:程序博客网 时间:2024/06/06 02:22

ElasticSearch(四)

1.search操作
注意 mapping 设置 分词器不同 查询结果也会不同

 SearchResponse response = client.prepareSearch("index")                .setTypes("fulltext")                .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)                .setQuery(QueryBuilders.matchQuery("content", "中国"))                .setExplain(true)//按查询匹配度排序                .get();        SearchHits searchHits = response.getHits();        SearchHit[] hits = searchHits.getHits();        for (SearchHit hit : hits) {            Map<String, Object> source = hit.getSource();            for (Map.Entry<String, Object> entry : source.entrySet()) {                System.out.println(entry.getKey()+":"+entry.getValue());            }        }

2.Search 高亮显示

 HighlightBuilder builder = new HighlightBuilder()                .field("content").preTags("<font color='red'>").postTags("</font>");        SearchResponse response = client.prepareSearch("inde")                .setTypes("fulltext")                .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)                .setExplain(true)                .setQuery(QueryBuilders.matchQuery("content", "中国"))                .highlighter(builder)                .get();        SearchHits searchHits = response.getHits();        SearchHit[] hits = searchHits.getHits();        for (SearchHit hit : hits) {            System.out.println("非高亮:"+hit.getSourceAsString());            Map<String, HighlightField> highlightFields = hit.getHighlightFields();            for (Map.Entry<String, HighlightField> entry : highlightFields.entrySet()) {                System.out.println(entry.getKey()+":"+entry.getValue());            }        }

2.Aggregations 分组筛选统计 用于数据的分析
注意 5.x版本 需要在设置mapping是 对分组的字段设置 fielddata:true 官网有提醒

 /**     * Aggregation.terms 根据某个字段进行分组 统计数量     */    @org.junit.Test    public void aggregation(){        SearchResponse response = client.prepareSearch("love")                .setTypes("user")                .addAggregation(AggregationBuilders.terms("group")                            .field("address").size(Integer.MAX_VALUE)                )                .setSize(100)                .get();        Terms terms = response.getAggregations().get("group");        Terms.Bucket 北京 = terms.getBucketByKey("北京");        System.out.println("住在北京的有:"+北京.getDocCount());        List<? extends Terms.Bucket> buckets = terms.getBuckets();        for (Terms.Bucket bucket : buckets) {            System.out.println(bucket.getKey()+" : "+bucket.getDocCount());        }        SearchHits searchHits = response.getHits();        System.out.println("总数:"+searchHits.getTotalHits());        SearchHit[] hits = searchHits.getHits();        for (SearchHit hit : hits) {            System.out.println(hit.getSourceAsString());        }    }    /**     * Aggregation  最小值     */    @Test    public void aggregation2(){        SearchResponse response = client.prepareSearch("love").setTypes("user")                .addAggregation(AggregationBuilders.min("group")                        .field("age")                ).get();        Min min = response.getAggregations().get("group");        System.out.println(min.getValue());    }    /**     * Aggregation  最大值     */    @Test    public void aggregation3(){        SearchResponse response = client.prepareSearch("love").setTypes("user")                .addAggregation(AggregationBuilders.max("group")                        .field("age")                ).get();        Max max = response.getAggregations().get("group");        System.out.println(max.getValue());    }    /**     * Aggregation 求和     */    @Test    public void aggregation4(){        SearchResponse response = client.prepareSearch("love")                .setTypes("user").addAggregation(                        AggregationBuilders.sum("group")                                .field("age")                ).get();        Sum sum = response.getAggregations().get("group");        System.out.println(sum.getValue());    }    /**     * Aggregation 统计     */    @Test    public void aggregation5(){        SearchResponse response = client.prepareSearch("love")                .setTypes("user").addAggregation(                        AggregationBuilders.stats("group")                                .field("age")                ).get();        Stats stat = response.getAggregations().get("group");        System.out.println("年龄平均值:"+stat.getAvg());        System.out.println("年龄最大值:"+stat.getMax());        System.out.println("年龄最小值:"+stat.getMin());        System.out.println("年龄求和:"+stat.getSum());        System.out.println("年龄数量:"+stat.getCount());    }

//还有一些其他的 用的时候再去官网看api吧

原创粉丝点击