实例代码如下:
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实例