elasticsearch MultiSearch实例

在实际开发中,我们需要对多个索引搜索,然后得出一个综合结果。例如:“综合搜索”,得出新闻和话题的搜索结果。

实例代码如下:

Client esClient = ESServiceSingleton2.getTransportClient();
        SearchRequestBuilder tagSearch = esClient
           .prepareSearch(index)//索引
           .setTypes(type)//索引类型
           .setScroll(new TimeValue(60000))
                .addFields("id","tagname")//索引的域
                .addSort("_score", SortOrder.DESC)
                .addSort("updatetime", SortOrder.DESC)
                .addHighlightedField("tagname")
                .setHighlighterEncoder("UTF-8")
                .setHighlighterPreTags("<em>")
                .setHighlighterPostTags("</em>")
           .setQuery(query)//查询query
           .setFrom(0)
                .setSize(10);
 
        SearchRequestBuilder countrySearch = esClient.prepareSearch(index)
                .setTypes(type)
                .setQuery(query)
                .setScroll(new TimeValue(60000))
                .addFields("id","fname")
                .addSort("_score", SortOrder.DESC)
                .addSort("updatetime", SortOrder.DESC)
                .addHighlightedField("fname")
                .setHighlighterEncoder("UTF-8")
                .setHighlighterPreTags("<em>")
                .setHighlighterPostTags("</em>")
                .setFrom(0)
                .setSize(10);
MultiSearchResponse multiSearchResponse = esClient.prepareMultiSearch()
               .add(tagSearch)
               .add(userSearch)
               .add(topicSearch)
               .add(countrySearch)
               .execute().actionGet();
        long sum = 0;
        float usetime=0f;
 
 
        for (MultiSearchResponse.Item item : multiSearchResponse.getResponses()) {
            SearchResponse response = item.getResponse();
            sum += response.getHits().totalHits();
            usetime+=response.getTookInMillis()/1000f;
            for (SearchHit hit : response.getHits()) {
            String index=hit.getIndex();
            //根据不同索引名作不同的处理。
           }
}

通过测试,发现multisearch 响应时间很快,在0.0 秒之后,不过,我这边数据量比较少。
关于如何获取elasticsearch java 客户端 可参考:elasticsearch获取java client实例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值