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<String, Object> 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中做注册模板,变更时需要重新发布

/**
	 * 注册模板 <br>
	 * 注册模板的客户端要是用低级客户端,高级客户端没有提供注册模板<br>
	 * 注册模板建议直接执行命令,不要再java中执行,在java中做注册模板,变更时需要重新发布<br>
	 * @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<String, Object> 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<String, Object>());
				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<String, Object> 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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值