Elasticsearch 7 multiSearchTemplate 例子

mac2026-04-23  6

將常用的查询定义为模版,查询时指定载入的模版及查询条件:

@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());                 }             }         }     }

 

 

最新回复(0)