当前位置: 首页 > elasticsearch, 搜索 > 正文

elasticsearch MultiSearch实例

1 星2 星3 星4 星5 星 (2 次投票, 评分: 5.00, 总分: 5)
Loading ... Loading ...
baidu_share

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

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实例

本文固定链接: http://www.chepoo.com/elasticsearch-multisearch-demo.html | IT技术精华网

elasticsearch MultiSearch实例:等您坐沙发呢!

发表评论