ElasticSearchHighLevelRESTAPI【5】使用模板搜索

更新时间:2023-06-17 04:24:49 阅读:13 评论:0

ElasticSearchHighLevelRESTAPI【5】使⽤模板搜索
ElasticSearch Rest⾼级API 提供了多种搜索⽅式,除了前⾯讲到的arch查询,ElasticSearch 还提供了通过模板搜索查询。我个⼈⽐较喜欢这种⽅式。
我们可以通过脚本预选注册模板,在注册模板时定义⼀个模板名称。在查询时通过模板名称调⽤该模板。⾸先演⽰下如何注册模板:
public void registTemplate(){
RestClient restClient = RestClient();
String template = "{\n" +
"  \"script\":{\n" +
"    \"lang\":\"mustache\",\n" +
"    \"source\":{\n" +
"      \"query\":{\n" +
"        \"match\":{\n" +
"          \"{{key}}\":\"{{value}}\"\n" +
"        }\n" +
"      },\n" +
"      \"size\":\"{{size}}\"\n" +
"    }\n" +
右脑潜能"  }\n" +
"}";
Request scriptRequest1 = new Request("POST", "_scripts/title_arch");
scriptRequest1.tJsonEntity(template);
tamatotry {
restClient.performRequest(scriptRequest1);
restClient.clo();
} catch (IOException e) {
e.printStackTrace();
}
}
由于ElasticSearch 6.5版本的⾼级Rest API中暂时还没有提供⽤于注册模板的存储脚本,所以本⽰例中使⽤的低级REST客户端。本⽰例中注册了⼀个名为“title_arch”的模板
有了这个模板就可以通过“title_arch”去调⽤,动态的将查询参数添加到模板中去。模板调⽤⽰例如下:
public void templateSearch(){
RestHighLevelClient client = RestHighLevelClient();
try {
SearchTemplateRequest request = new SearchTemplateRequest();
cea
request.tRequest(new SearchRequest("posts"));
request.tScriptType(ScriptType.STORED);
request.tScript("title_arch");
全国大学英语四六级考试报名官网Map<String, Object> params = new HashMap<>();
params.put("key", "name");
params.put("value", "福卖福");
巴拿巴
params.put("size", 5);
request.tScriptParams(params);
try {
SearchTemplateRespon archTemplateRespon = client.archTemplate(request, RequestOptions.DEFAULT);
SearchHit[] hits = Respon().getHits().getHits();
for (SearchHit hit : hits) {
System.out.SourceAsString());
}
client.clo();
} catch (IOException e) {
e.printStackTrace();
kangaroo
}
} catch (Exception e) {
e.printStackTrace();
}
}
针对每个模板我们执⾏⼀次搜索请求,如果我们⼯作中针对同⼀模板可能会有不⽌⼀次的请求,如果每个请求都去单独执⾏的话未免有点繁琐。我们可以通过marchTemplate
来实现⼀次请求实现多条搜索,⽰例如下:
public void multiTemplateSearch(){
RestHighLevelClient client = RestHighLevelClient();
String [] archTerms = {"周⼤福", "特博⼠", "詹姆斯"}; // 要搜索的条件
MultiSearchTemplateRequest multiRequest = new MultiSearchTemplateRequest();
for (String archTerm : archTerms) {
SearchTemplateRequest request = new SearchTemplateRequest();
kattun
request.tRequest(new SearchRequest("posts")); //指定为posts索引库
request.tScriptType(ScriptType.INLINE);
request.tScript(
"{\n" +
"  \"query\":{\n" +
"    \"match\":{\n" +
"      \"{{key}}\":\"{{value}}\"\n" +
"    }\n" +
"  },\n" +
"  \"size\":\"{{size}}\"\n" +
"}");
Map<String, Object> scriptParams = new HashMap<>();
/
/向模板中填充对应值
scriptParams.put("key", "name");
scriptParams.put("value", archTerm);
scriptParams.put("size", 5);
request.tScriptParams(scriptParams);
multiRequest.add(request);
}
//执⾏查询
try {
MultiSearchTemplateRespon multiRespon = client.marchTemplate(multiRequest, RequestOptions.DEFAULT);
//返回⼀组响应,每个请求对应⼀个响应
for (MultiSearchTemplateRespon.Item item : Respons()) {
if (item.isFailure()) {
String error = FailureMessage(); //搜索请求失败返回错误信息
abe}el {
SearchTemplateRespon archTemplateRespon = Respon();
SearchRespon respon = Respon();快速有效的祛斑方法
SearchHits hits = Hits();
the fray
System.out.println("----------");
for (SearchHit hit : hits) {
System.out.SourceAsString());
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
执⾏结果如下

本文发布于:2023-06-17 04:24:49,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/972846.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:模板   注册   搜索   查询   请求
相关文章
留言与评论(共有 0 条评论)
昵称:
匿名发表 登录账号
         
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图