就像bulk在多文檔索引時提高效率一樣,msearch也能提升多個查詢的執行效率,這裏主要考慮到網絡消耗,使用search查詢可能要循環執行N遍,但是使用msearch一次從客戶端一次客戶請求即可。下面給出實例代碼:
@Test
public void testMultiSearch(){
MultiSearchRequest request = new MultiSearchRequest();
SearchRequest firstSearchRequest = new SearchRequest();
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.matchQuery("cityId", "410500"));
firstSearchRequest.source(searchSourceBuilder);
firstSearchRequest.indices("sub_bank1031");
request.add(firstSearchRequest);
SearchRequest secondSearchRequest = new SearchRequest();
searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.matchQuery("cityId", "511000"));
secondSearchRequest.source(searchSourceBuilder);
secondSearchRequest.indices("sub_bank1031");
request.add(secondSearchRequest);
try {
MultiSearchResponse response = highLevelClient.msearch(request, RequestOptions.DEFAULT);
response.forEach(t->{
SearchResponse resp = t.getResponse();
Arrays.stream(resp.getHits().getHits())
.forEach(i -> {
System.out.println(i.getId());
System.out.println(i.getIndex());
System.out.println(i.getSourceAsString());
System.out.println(i.getShard());
});
System.out.println(resp.getHits().totalHits);
});
} catch (IOException e) {
e.printStackTrace();
}
}
pom中依賴爲:
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>6.8.0</version>
</dependency>
<!-- elasticsearch high level -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<exclusions>
<exclusion>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
</exclusion>
</exclusions>
<version>6.8.0</version>
</dependency>