ElasticSearch Java REST高度クライアントクエリーテンプレートSearchTemplate


ElasticSearch Java REST高度クライアントインラインテンプレートSearchTemplate
ElasticSearch 7.2.0
1.インラインテンプレート
2.登録テンプレートの作成
3.登録テンプレートの実行
4.マルチテンプレート
5.クライアントの作成
6.maven構成---pomファイル
人工知能に興味があるポイントは次のリンクです.
現在、人工知能は非常に人気があり、多くの友达が学びたいと思っていますが、一般的なチュートリアルは博碩生のために準備されていて、理解しにくいです.最近、白さんの入門にぴったりのチュートリアルを見つけました.分かりやすいだけでなく、ユーモアもあります.だからみんなに分かち合うことができませんでした.ここをクリックするとチュートリアルにジャンプできます.
https://www.cbedai.net/u014646662
1.インラインテンプレート
/**
	 *     
	 */
	public static void inlineTemplate() {
		//     
		var client = getClient();
		SearchTemplateRequest request = new SearchTemplateRequest();
		//    
		request.setRequest(new SearchRequest("movies"));
		//     
		request.setScriptType(ScriptType.INLINE);
		//    
		request.setScript("{" + "  \"query\": { \"match\" : { \"{{field}}\" : \"{{value}}\" } },"
				+ "  \"size\" : \"{{size}}\"" + "}");

		Map scriptParams = new HashMap<>();
		scriptParams.put("field", "title");
		scriptParams.put("value", "life");
		scriptParams.put("size", 5);
		request.setScriptParams(scriptParams);

		try {
			SearchTemplateResponse response = client.searchTemplate(request, RequestOptions.DEFAULT);
			//      
			response.getResponse().getHits().forEach(System.out::println);
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			//     
			close(client);
		}
	}
2.登録テンプレートの作成
テンプレートを登録するクライアントが低級クライアントを使う場合、高級クライアントは登録テンプレートを提供していない登録テンプレートは直接コマンドを実行することを提案して、javaの中で実行しないで、javaの中で登録テンプレートをして、変更する時再発行する必要があります
/**
	 *      
* ,
* , java , java ,
* @return */ private static int registerTemplate() { var client = getLowClient(); Request scriptRequest = new Request("POST", "_scripts/movies_script"); String json = "{" + " \"script\": {" + " \"lang\": \"mustache\"," + " \"source\": {" + " \"query\": { \"match\" : { \"{{field}}\" : \"{{value}}\" } }," + " \"size\" : \"{{size}}\"" + " }" + " }" + "}"; scriptRequest.setJsonEntity(json); int statusCode = -1; try { Response response = client.performRequest(scriptRequest); // , statusCode = response.getStatusLine().getStatusCode(); } catch (IOException e) { e.printStackTrace(); } finally { close(client); } return statusCode; }
3.登録テンプレートの実行
 
/**
	 *       
	 */
	public static void runRegisterTemplate() {
		int statusCode = registerTemplate();
		
		//          API        。
		//   ,     API   REST        ,      ,      REST   。
		if (statusCode == 200) {
			SearchTemplateRequest request = new SearchTemplateRequest();
			request.setRequest(new SearchRequest("movies"));

			request.setScriptType(ScriptType.STORED);
			request.setScript("movies_script");

			Map params = new HashMap<>();
			params.put("field", "title");
			params.put("value", "life");
			params.put("size", 5);
			request.setScriptParams(params);

			//      ,                :
			request.setSimulate(true);
			
			request.setExplain(true);
			request.setProfile(true);
			RestHighLevelClient rHClient = getClient();
			try {
				SearchTemplateResponse response = rHClient.searchTemplate(request, RequestOptions.DEFAULT);
				
				SearchTemplateRequest request2 = new SearchTemplateRequest();
				request2.setRequest(new SearchRequest("movies"));
				request2.setScriptType(ScriptType.INLINE);
				request2.setScript(response.getSource().utf8ToString());
				request2.setScriptParams(new HashMap());
				response = rHClient.searchTemplate(request2, RequestOptions.DEFAULT);
				SearchResponse sResponse = response.getResponse();
				SearchHits hits = sResponse.getHits();
				if(hits != null) {
					for (SearchHit hit : hits) {
						System.out.println(hit.getSourceAsString());
					}
				}
			} catch (IOException e) {
				// TODO       catch  
				e.printStackTrace();
			}finally {
				try {
					rHClient.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
4.マルチテンプレート
public static void mulitTemplate() {
		RestHighLevelClient client = getClient();
		String [] searchTerms = {"life", "mom", "girl"};

		MultiSearchTemplateRequest multiRequest = new MultiSearchTemplateRequest(); 
		for (String searchTerm : searchTerms) {
		    SearchTemplateRequest request = new SearchTemplateRequest();  
		    request.setRequest(new SearchRequest("movies"));

		    request.setScriptType(ScriptType.INLINE);
		    request.setScript(
		        "{" +
		        "  \"query\": { \"match\" : { \"{{field}}\" : \"{{value}}\" } }," +
		        "  \"size\" : \"{{size}}\"" +
		        "}");

		    Map scriptParams = new HashMap<>();
		    scriptParams.put("field", "title");
		    scriptParams.put("value", searchTerm);
		    scriptParams.put("size", 1);
		    request.setScriptParams(scriptParams);
		    multiRequest.add(request);
		}
		
		try {
			MultiSearchTemplateResponse multiResponse = client.msearchTemplate(multiRequest, RequestOptions.DEFAULT);
			multiResponse.forEach(item -> item.getResponse().getResponse().getHits().forEach(System.out::println));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
5.クライアントの作成
高度なクライアントの作成
低レベルクライアントの作成
クライアントを閉じる
/**
	 * 
	 *      
	 * 
	 * @param client
	 */
	private static void close(Closeable client) {
		try {
			client.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 *      
	 * 
	 * @return
	 */
	private static RestHighLevelClient getClient() {
		RestHighLevelClient client = new RestHighLevelClient(
				RestClient.builder(new HttpHost("elk-node01", 9200, "http"), new HttpHost("elk-node02", 9200, "http"),
						new HttpHost("elk-node03", 9200, "http")));
		return client;
	}

	/**
	 *        
	 * 
	 * @return
	 */
	private static RestClient getLowClient() {
		RestClient client = RestClient.builder(new HttpHost("elk-node01", 9200, "http"),
				new HttpHost("elk-node02", 9200, "http"), new HttpHost("elk-node03", 9200, "http")).build();
		return client;
	}
6.maven構成---pom
Elasticsearch Java REST高度クライアントmaven構成
https://blog.csdn.net/u014646662/article/details/97895028