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配置