{"id":1393,"date":"2023-03-19T11:09:57","date_gmt":"2023-03-19T03:09:57","guid":{"rendered":"https:\/\/www.appblog.cn\/?p=1393"},"modified":"2023-04-28T21:11:04","modified_gmt":"2023-04-28T13:11:04","slug":"elasticsearch-high-level-rest-api-using-template-search","status":"publish","type":"post","link":"https:\/\/www.appblog.cn\/index.php\/2023\/03\/19\/elasticsearch-high-level-rest-api-using-template-search\/","title":{"rendered":"ElasticSearch High Level REST API\uff085\uff09\u4f7f\u7528\u6a21\u677f\u641c\u7d22"},"content":{"rendered":"<p>ElasticSearch Rest\u9ad8\u7ea7API \u63d0\u4f9b\u4e86\u591a\u79cd\u641c\u7d22\u65b9\u5f0f\uff0c\u9664\u4e86\u524d\u9762\u8bb2\u5230\u7684search\u67e5\u8be2\uff0cElasticSearch \u8fd8\u63d0\u4f9b\u4e86\u901a\u8fc7\u6a21\u677f\u641c\u7d22\u67e5\u8be2\u3002<\/p>\n<p>\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u811a\u672c\u9884\u9009\u6ce8\u518c\u6a21\u677f\uff0c\u5728\u6ce8\u518c\u6a21\u677f\u65f6\u5b9a\u4e49\u4e00\u4e2a\u6a21\u677f\u540d\u79f0\u3002\u5728\u67e5\u8be2\u65f6\u901a\u8fc7\u6a21\u677f\u540d\u79f0\u8c03\u7528\u8be5\u6a21\u677f\u3002<\/p>\n<h2>\u6ce8\u518c\u6a21\u677f<\/h2>\n<p><!-- more --><\/p>\n<pre><code class=\"language-java\">@Autowired\nprivate RestClient restClient;\n\n@GetMapping(&quot;template\/register&quot;)\npublic String registerTemplate() {\n    String template = &quot;{\\n&quot; +\n            &quot;  \\&quot;script\\&quot;:{\\n&quot; +\n            &quot;    \\&quot;lang\\&quot;:\\&quot;mustache\\&quot;,\\n&quot; +\n            &quot;    \\&quot;source\\&quot;:{\\n&quot; +\n            &quot;      \\&quot;query\\&quot;:{\\n&quot; +\n            &quot;        \\&quot;match\\&quot;:{\\n&quot; +\n            &quot;          \\&quot;{{key}}\\&quot;:\\&quot;{{value}}\\&quot;\\n&quot; +\n            &quot;        }\\n&quot; +\n            &quot;      },\\n&quot; +\n            &quot;      \\&quot;size\\&quot;:\\&quot;{{size}}\\&quot;\\n&quot; +\n            &quot;    }\\n&quot; +\n            &quot;  }\\n&quot; +\n            &quot;}&quot;;\n    Request scriptRequest = new Request(&quot;POST&quot;, &quot;_scripts\/title_search&quot;);\n    scriptRequest.setJsonEntity(template);\n\n    try {\n        Response response = restClient.performRequest(scriptRequest);\n        \/\/restClient.close();\n        return JSON.toJSONString(response);\n    } catch (IOException e) {\n        e.printStackTrace();\n    }\n    return &quot;&quot;;\n}<\/code><\/pre>\n<pre><code class=\"language-json\">{\n    &quot;entity&quot;:{\n        &quot;chunked&quot;:false,\n        &quot;content&quot;:{\n\n        },\n        &quot;contentLength&quot;:21,\n        &quot;contentType&quot;:{\n            &quot;buffer&quot;:{\n                &quot;empty&quot;:false,\n                &quot;full&quot;:false\n            },\n            &quot;elements&quot;:[\n                {\n                    &quot;name&quot;:&quot;application\/json&quot;,\n                    &quot;parameterCount&quot;:1,\n                    &quot;parameters&quot;:[\n                        {\n                            &quot;name&quot;:&quot;charset&quot;,\n                            &quot;value&quot;:&quot;UTF-8&quot;\n                        }\n                    ]\n                }\n            ],\n            &quot;name&quot;:&quot;content-type&quot;,\n            &quot;value&quot;:&quot;application\/json; charset=UTF-8&quot;,\n            &quot;valuePos&quot;:13\n        },\n        &quot;repeatable&quot;:false,\n        &quot;streaming&quot;:true\n    },\n    &quot;headers&quot;:[\n        {\n            &quot;$ref&quot;:&quot;$.entity.contentType&quot;\n        },\n        {\n            &quot;buffer&quot;:{\n                &quot;empty&quot;:false,\n                &quot;full&quot;:false\n            },\n            &quot;elements&quot;:[\n                {\n                    &quot;name&quot;:&quot;21&quot;,\n                    &quot;parameterCount&quot;:0,\n                    &quot;parameters&quot;:[\n\n                    ]\n                }\n            ],\n            &quot;name&quot;:&quot;content-length&quot;,\n            &quot;value&quot;:&quot;21&quot;,\n            &quot;valuePos&quot;:15\n        }\n    ],\n    &quot;host&quot;:{\n        &quot;hostName&quot;:&quot;192.168.165.239&quot;,\n        &quot;port&quot;:9200,\n        &quot;schemeName&quot;:&quot;http&quot;\n    },\n    &quot;requestLine&quot;:{\n        &quot;method&quot;:&quot;POST&quot;,\n        &quot;protocolVersion&quot;:{\n            &quot;major&quot;:1,\n            &quot;minor&quot;:1,\n            &quot;protocol&quot;:&quot;HTTP&quot;\n        },\n        &quot;uri&quot;:&quot;_scripts\/title_search&quot;\n    },\n    &quot;statusLine&quot;:{\n        &quot;protocolVersion&quot;:{\n            &quot;$ref&quot;:&quot;$.requestLine.protocolVersion&quot;\n        },\n        &quot;reasonPhrase&quot;:&quot;OK&quot;,\n        &quot;statusCode&quot;:200\n    },\n    &quot;warnings&quot;:[\n\n    ]\n}<\/code><\/pre>\n<p>\u7531\u4e8eElasticSearch 6.5-7.1\u7248\u672c\u7684\u9ad8\u7ea7Rest API\u4e2d\u6682\u65f6\u8fd8\u6ca1\u6709\u63d0\u4f9b\u7528\u4e8e\u6ce8\u518c\u6a21\u677f\u7684\u5b58\u50a8\u811a\u672c\uff0c\u6240\u4ee5\u672c\u793a\u4f8b\u4e2d\u4f7f\u7528\u7684\u4f4e\u7ea7REST\u5ba2\u6237\u7aef\u3002\u672c\u793a\u4f8b\u4e2d\u6ce8\u518c\u4e86\u4e00\u4e2a\u540d\u4e3a<code>title_search<\/code>\u7684\u6a21\u677f<\/p>\n<p>\u6709\u4e86\u8fd9\u4e2a\u6a21\u677f\u5c31\u53ef\u4ee5\u901a\u8fc7<code>title_search<\/code>\u53bb\u8c03\u7528\uff0c\u52a8\u6001\u7684\u5c06\u67e5\u8be2\u53c2\u6570\u6dfb\u52a0\u5230\u6a21\u677f\u4e2d\u53bb\u3002\u6a21\u677f\u8c03\u7528\u793a\u4f8b\u5982\u4e0b\uff1a<\/p>\n<pre><code class=\"language-java\">@GetMapping(&quot;template\/search&quot;)\npublic void templateSearch() {\n    try {\n        SearchTemplateRequest request = new SearchTemplateRequest();\n        request.setRequest(new SearchRequest(&quot;test&quot;));\n\n        request.setScriptType(ScriptType.STORED);\n        request.setScript(&quot;title_search&quot;);\n\n        Map&lt;String, Object&gt; params = new HashMap&lt;&gt;();\n        params.put(&quot;key&quot;, &quot;name&quot;);\n        params.put(&quot;value&quot;, &quot;Joe.Ye&quot;);\n        params.put(&quot;size&quot;, 5);\n        request.setScriptParams(params);\n        try {\n            SearchTemplateResponse searchTemplateResponse = client.searchTemplate(request, RequestOptions.DEFAULT);\n            SearchHit[] hits = searchTemplateResponse.getResponse().getHits().getHits();\n            for (SearchHit hit : hits) {\n                log.info(hit.getSourceAsString());\n            }\n            client.close();\n        } catch (IOException e) {\n            e.printStackTrace();\n        }\n    } catch (Exception e) {\n        e.printStackTrace();\n    }\n}<\/code><\/pre>\n<pre><code>{&quot;name&quot;:&quot;Joe.Ye&quot;,&quot;email&quot;:&quot;yezhou@yezhou.org&quot;,&quot;homepage&quot;:&quot;http:\/\/www.appblog.cn&quot;}\n{&quot;name&quot;:&quot;Joe.Ye&quot;,&quot;age&quot;:28,&quot;homepage&quot;:&quot;http:\/\/www.appblog.cn&quot;}\n{&quot;name&quot;:&quot;Joe.Ye&quot;,&quot;email&quot;:&quot;yezhou@yezhou.org&quot;,&quot;homepage&quot;:&quot;http:\/\/www.appblog.cn&quot;}\n{&quot;name&quot;:&quot;Joe.Ye@AppBlog.CN&quot;,&quot;email&quot;:&quot;yezhou@yezhou.org&quot;,&quot;age&quot;:18,&quot;homepage&quot;:&quot;http:\/\/www.appblog.cn&quot;}\n{&quot;name&quot;:&quot;Joe.Ye@AppBlog.CN&quot;,&quot;age&quot;:18,&quot;homepage&quot;:&quot;http:\/\/www.appblog.cn&quot;}<\/code><\/pre>\n<p>\u9488\u5bf9\u6bcf\u4e2a\u6a21\u677f\u6211\u4eec\u6267\u884c\u4e00\u6b21\u641c\u7d22\u8bf7\u6c42\uff0c\u5982\u679c\u6211\u4eec\u5de5\u4f5c\u4e2d\u9488\u5bf9\u540c\u4e00\u6a21\u677f\u53ef\u80fd\u4f1a\u6709\u4e0d\u6b62\u4e00\u6b21\u7684\u8bf7\u6c42\uff0c\u5982\u679c\u6bcf\u4e2a\u8bf7\u6c42\u90fd\u53bb\u5355\u72ec\u6267\u884c\u7684\u8bdd\u672a\u514d\u6709\u70b9\u7e41\u7410\u3002\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7<code>multiTemplateSearch<\/code>\u5b9e\u73b0\u4e00\u6b21\u8bf7\u6c42\u5b9e\u73b0\u591a\u6761\u641c\u7d22\uff0c\u793a\u4f8b\u5982\u4e0b\uff1a<\/p>\n<pre><code class=\"language-java\">@GetMapping(&quot;template\/multiSearch&quot;)\npublic void multiTemplateSearch() {\n    String[] searchTerms = {&quot;Joe.Ye&quot;, &quot;Xiong&quot;}; \/\/ \u8981\u641c\u7d22\u7684\u6761\u4ef6\n    MultiSearchTemplateRequest multiRequest = new MultiSearchTemplateRequest();\n    for (String searchTerm : searchTerms) {\n        SearchTemplateRequest request = new SearchTemplateRequest();\n        request.setRequest(new SearchRequest(&quot;person&quot;)); \/\/\u6307\u5b9a\u4e3aperson\u7d22\u5f15\u5e93\n\n        request.setScriptType(ScriptType.INLINE);\n        request.setScript(\n                &quot;{\\n&quot; +\n                &quot;  \\&quot;query\\&quot;:{\\n&quot; +\n                &quot;    \\&quot;match\\&quot;:{\\n&quot; +\n                &quot;      \\&quot;{{key}}\\&quot;:\\&quot;{{value}}\\&quot;\\n&quot; +\n                &quot;    }\\n&quot; +\n                &quot;  },\\n&quot; +\n                &quot;  \\&quot;size\\&quot;:\\&quot;{{size}}\\&quot;\\n&quot; +\n                &quot;}&quot;);\n\n        Map&lt;String, Object&gt; scriptParams = new HashMap&lt;&gt;();\n        \/\/\u5411\u6a21\u677f\u4e2d\u586b\u5145\u5bf9\u5e94\u503c\n        scriptParams.put(&quot;key&quot;, &quot;name&quot;);\n        scriptParams.put(&quot;value&quot;, searchTerm);\n        scriptParams.put(&quot;size&quot;, 5);\n        request.setScriptParams(scriptParams);\n\n        multiRequest.add(request);\n    }\n    \/\/\u6267\u884c\u67e5\u8be2\n    try {\n        MultiSearchTemplateResponse multiResponse = client.msearchTemplate(multiRequest, RequestOptions.DEFAULT);\n        \/\/\u8fd4\u56de\u4e00\u7ec4\u54cd\u5e94\uff0c\u6bcf\u4e2a\u8bf7\u6c42\u5bf9\u5e94\u4e00\u4e2a\u54cd\u5e94\n        for (MultiSearchTemplateResponse.Item item : multiResponse.getResponses()) {\n            if (item.isFailure()) {\n                String error = item.getFailureMessage(); \/\/\u641c\u7d22\u8bf7\u6c42\u5931\u8d25\u8fd4\u56de\u9519\u8bef\u4fe1\u606f\n                log.info(error);\n            } else {\n                SearchTemplateResponse searchTemplateResponse = item.getResponse();\n                SearchResponse response = searchTemplateResponse.getResponse();\n                SearchHits hits = response.getHits();\n                for (SearchHit hit : hits) {\n                    log.info(hit.getSourceAsString());\n                }\n            }\n        }\n    } catch (IOException e) {\n        e.printStackTrace();\n    }\n}<\/code><\/pre>\n<pre><code>{&quot;age&quot;:28,&quot;height&quot;:175.2,&quot;name&quot;:&quot;Joe.Ye&quot;}\n{&quot;age&quot;:26,&quot;height&quot;:165.5,&quot;name&quot;:&quot;Xiong&quot;}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>ElasticSearch Rest\u9ad8\u7ea7API \u63d0\u4f9b\u4e86\u591a\u79cd\u641c\u7d22\u65b9\u5f0f\uff0c\u9664\u4e86\u524d\u9762\u8bb2\u5230\u7684search\u67e5\u8be2\uff0cElast [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[301],"tags":[],"class_list":["post-1393","post","type-post","status-publish","format-standard","hentry","category-elasticsearch"],"_links":{"self":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/1393","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/comments?post=1393"}],"version-history":[{"count":0,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/1393\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/media?parent=1393"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/categories?post=1393"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/tags?post=1393"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}