|
19 | 19 |
|
20 | 20 | package org.elasticsearch.client.documentation; |
21 | 21 |
|
| 22 | +import org.apache.http.entity.ContentType; |
| 23 | +import org.apache.http.nio.entity.NStringEntity; |
22 | 24 | import org.elasticsearch.action.ActionListener; |
23 | 25 | import org.elasticsearch.action.LatchedActionListener; |
24 | 26 | import org.elasticsearch.action.admin.indices.create.CreateIndexRequest; |
|
41 | 43 | import org.elasticsearch.action.support.IndicesOptions; |
42 | 44 | import org.elasticsearch.action.support.WriteRequest; |
43 | 45 | import org.elasticsearch.client.ESRestHighLevelClientTestCase; |
| 46 | +import org.elasticsearch.client.Request; |
| 47 | +import org.elasticsearch.client.Response; |
| 48 | +import org.elasticsearch.client.RestClient; |
44 | 49 | import org.elasticsearch.client.RestHighLevelClient; |
| 50 | +import org.elasticsearch.common.bytes.BytesReference; |
45 | 51 | import org.elasticsearch.common.text.Text; |
46 | 52 | import org.elasticsearch.common.unit.Fuzziness; |
47 | 53 | import org.elasticsearch.common.unit.TimeValue; |
|
60 | 66 | import org.elasticsearch.index.rankeval.RatedRequest; |
61 | 67 | import org.elasticsearch.index.rankeval.RatedSearchHit; |
62 | 68 | import org.elasticsearch.rest.RestStatus; |
| 69 | +import org.elasticsearch.script.ScriptType; |
| 70 | +import org.elasticsearch.script.mustache.SearchTemplateRequest; |
| 71 | +import org.elasticsearch.script.mustache.SearchTemplateResponse; |
63 | 72 | import org.elasticsearch.search.Scroll; |
64 | 73 | import org.elasticsearch.search.SearchHit; |
65 | 74 | import org.elasticsearch.search.SearchHits; |
|
92 | 101 | import java.util.ArrayList; |
93 | 102 | import java.util.Arrays; |
94 | 103 | import java.util.Collections; |
| 104 | +import java.util.HashMap; |
95 | 105 | import java.util.List; |
96 | 106 | import java.util.Map; |
97 | 107 | import java.util.concurrent.CountDownLatch; |
@@ -706,9 +716,128 @@ public void onFailure(Exception e) { |
706 | 716 | } |
707 | 717 | } |
708 | 718 |
|
| 719 | + public void testSearchTemplateWithInlineScript() throws Exception { |
| 720 | + indexSearchTestData(); |
| 721 | + RestHighLevelClient client = highLevelClient(); |
| 722 | + |
| 723 | + // tag::search-template-request-inline |
| 724 | + SearchTemplateRequest request = new SearchTemplateRequest(); |
| 725 | + request.setRequest(new SearchRequest("posts")); // <1> |
| 726 | + |
| 727 | + request.setScriptType(ScriptType.INLINE); |
| 728 | + request.setScript( // <2> |
| 729 | + "{" + |
| 730 | + " \"query\": { \"match\" : { \"{{field}}\" : \"{{value}}\" } }," + |
| 731 | + " \"size\" : \"{{size}}\"" + |
| 732 | + "}"); |
| 733 | + |
| 734 | + Map<String, Object> scriptParams = new HashMap<>(); |
| 735 | + scriptParams.put("field", "title"); |
| 736 | + scriptParams.put("value", "elasticsearch"); |
| 737 | + scriptParams.put("size", 5); |
| 738 | + request.setScriptParams(scriptParams); // <3> |
| 739 | + // end::search-template-request-inline |
| 740 | + |
| 741 | + // tag::search-template-response |
| 742 | + SearchTemplateResponse response = client.searchTemplate(request); |
| 743 | + SearchResponse searchResponse = response.getResponse(); |
| 744 | + assertNotNull(searchResponse); |
| 745 | + assertTrue(searchResponse.getHits().totalHits > 0); |
| 746 | + // end::search-template-response |
| 747 | + |
| 748 | + // tag::render-search-template-request |
| 749 | + request.setSimulate(true); // <1> |
| 750 | + // end::render-search-template-request |
| 751 | + |
| 752 | + // tag::render-search-template-response |
| 753 | + SearchTemplateResponse renderResponse = client.searchTemplate(request); |
| 754 | + BytesReference source = renderResponse.getSource(); |
| 755 | + assertNotNull(source); |
| 756 | + assertEquals(( |
| 757 | + "{" + |
| 758 | + " \"size\" : \"5\"," + |
| 759 | + " \"query\": { \"match\" : { \"title\" : \"elasticsearch\" } }" + |
| 760 | + "}").replaceAll("\\s+", ""), source.utf8ToString()); |
| 761 | + // end::render-search-template-response |
| 762 | + } |
| 763 | + |
| 764 | + public void testSearchTemplateWithStoredScript() throws Exception { |
| 765 | + indexSearchTestData(); |
| 766 | + RestHighLevelClient client = highLevelClient(); |
| 767 | + RestClient restClient = client(); |
| 768 | + |
| 769 | + // tag::register-script |
| 770 | + Request scriptRequest = new Request("POST", "_scripts/title_search"); |
| 771 | + scriptRequest.setEntity(new NStringEntity( |
| 772 | + "{" + |
| 773 | + " \"script\": {" + |
| 774 | + " \"lang\": \"mustache\"," + |
| 775 | + " \"source\": {" + |
| 776 | + " \"query\": { \"match\" : { \"{{field}}\" : \"{{value}}\" } }," + |
| 777 | + " \"size\" : \"{{size}}\"" + |
| 778 | + " }" + |
| 779 | + " }" + |
| 780 | + "}", ContentType.APPLICATION_JSON)); |
| 781 | + Response scriptResponse = restClient.performRequest(scriptRequest); |
| 782 | + assertEquals(RestStatus.OK.getStatus(), scriptResponse.getStatusLine().getStatusCode()); |
| 783 | + // end::register-script |
| 784 | + |
| 785 | + // tag::search-template-request-stored |
| 786 | + SearchTemplateRequest request = new SearchTemplateRequest(); |
| 787 | + request.setRequest(new SearchRequest("posts")); |
| 788 | + |
| 789 | + request.setScriptType(ScriptType.STORED); |
| 790 | + request.setScript("title_search"); |
| 791 | + |
| 792 | + Map<String, Object> params = new HashMap<>(); |
| 793 | + params.put("field", "title"); |
| 794 | + params.put("value", "elasticsearch"); |
| 795 | + params.put("size", 5); |
| 796 | + request.setScriptParams(params); |
| 797 | + // end::search-template-request-stored |
| 798 | + |
| 799 | + // tag::search-template-request-options |
| 800 | + request.setExplain(true); |
| 801 | + request.setProfile(true); |
| 802 | + // end::search-template-request-options |
| 803 | + |
| 804 | + // tag::search-template-execute |
| 805 | + SearchTemplateResponse response = client.searchTemplate(request); |
| 806 | + // end::search-template-execute |
| 807 | + |
| 808 | + SearchResponse searchResponse = response.getResponse(); |
| 809 | + assertNotNull(searchResponse); |
| 810 | + assertTrue(searchResponse.getHits().totalHits > 0); |
| 811 | + |
| 812 | + // tag::search-template-execute-listener |
| 813 | + ActionListener<SearchTemplateResponse> listener = new ActionListener<SearchTemplateResponse>() { |
| 814 | + @Override |
| 815 | + public void onResponse(SearchTemplateResponse response) { |
| 816 | + // <1> |
| 817 | + } |
| 818 | + |
| 819 | + @Override |
| 820 | + public void onFailure(Exception e) { |
| 821 | + // <2> |
| 822 | + } |
| 823 | + }; |
| 824 | + // end::search-template-execute-listener |
| 825 | + |
| 826 | + // Replace the empty listener by a blocking listener for tests. |
| 827 | + CountDownLatch latch = new CountDownLatch(1); |
| 828 | + listener = new LatchedActionListener<>(listener, latch); |
| 829 | + |
| 830 | + // tag::search-template-execute-async |
| 831 | + client.searchTemplateAsync(request, listener); // <1> |
| 832 | + // end::search-template-execute-async |
| 833 | + |
| 834 | + assertTrue(latch.await(30L, TimeUnit.SECONDS)); |
| 835 | + } |
| 836 | + |
709 | 837 | public void testFieldCaps() throws Exception { |
710 | 838 | indexSearchTestData(); |
711 | 839 | RestHighLevelClient client = highLevelClient(); |
| 840 | + |
712 | 841 | // tag::field-caps-request |
713 | 842 | FieldCapabilitiesRequest request = new FieldCapabilitiesRequest() |
714 | 843 | .fields("user") |
|
0 commit comments