將常用的查询定义为模版,查询时指定载入的模版及查询条件:
@Test public void testMultiSearch() throws IOException {
//这里如果要查询username=tom或者huang或者xxxx的相关记录,可以使用数组将查询条件传入
//MultiSearchTemplateRequest ,循环添加查询条件 String [] searchTerms = {"tom", "xxxx", "huang"};
MultiSearchTemplateRequest multiRequest = new MultiSearchTemplateRequest(); for (String searchTerm : searchTerms) { SearchTemplateRequest request = new SearchTemplateRequest(); request.setRequest(new SearchRequest("article_index"));
request.setScriptType(ScriptType.INLINE); request.setScript( "{" + " \"query\": { \"match\" : { \"{{field}}\" : \"{{value}}\" } }," + " \"size\" : \"{{size}}\"" + "}");
Map<String, Object> scriptParams = new HashMap<>(); scriptParams.put("field", "author"); scriptParams.put("value", searchTerm); scriptParams.put("size", 5); request.setScriptParams(scriptParams);
multiRequest.add(request); } MultiSearchTemplateResponse multiResponse = client.msearchTemplate(multiRequest, RequestOptions.DEFAULT); for (Item item : multiResponse.getResponses()) { if (item.isFailure()) { String error = item.getFailureMessage(); } else { SearchTemplateResponse searchTemplateResponse = item.getResponse(); SearchResponse searchResponse = searchTemplateResponse.getResponse(); SearchHits hits = searchResponse.getHits(); for(SearchHit hit:searchResponse.getHits()) { System.out.println("---SearchHit---" +hit.getSourceAsString()); } } } }
