全部产品
开放搜索

Push推送Demo

更新时间:2017-09-07 17:40:20   分享:   

V3.1 SDK Push方式新增文档样例代码

Push 推送数据方式,主要是预先生成符合我们规定格式的待推送数据集合,最后在调用Push方法时,将这些数据集合一次性批量推送到应用中。

注意

  • 推送的数据集合必须要符合我们规定的数据集合格式才行,可参考应用控制台->上传文件->参考样例数据,文件中的数据集合格式。
  • 也可以在程序中通过JSONObject 及 JSONArray对象,预先拼接生成符合我们规定格式的数据集合,再调用Push方法一次性将这些数据集合批量推送到应用中。
  • 批量推送文档个数不能太大,不能超过我们规定限制,否则可能会导致推送报错。

适用场景

  • 动态拼接数据推送场景
  • 单个文档推送场景
  • 预先生成待推送数据集合,再批量推送数据集合场景
  • 批量数据推送场景
  1. package com.aliyun.opensearch;
  2. import com.aliyun.opensearch.sdk.dependencies.com.google.common.collect.Lists;
  3. import com.aliyun.opensearch.sdk.dependencies.com.google.common.collect.Maps;
  4. import com.aliyun.opensearch.sdk.dependencies.org.json.JSONArray;
  5. import com.aliyun.opensearch.sdk.dependencies.org.json.JSONObject;
  6. import com.aliyun.opensearch.sdk.generated.OpenSearch;
  7. import com.aliyun.opensearch.sdk.generated.commons.OpenSearchClientException;
  8. import com.aliyun.opensearch.sdk.generated.commons.OpenSearchException;
  9. import com.aliyun.opensearch.sdk.generated.commons.OpenSearchResult;
  10. import com.aliyun.opensearch.sdk.generated.document.Command;
  11. import com.aliyun.opensearch.sdk.generated.document.DocumentConstants;
  12. import com.aliyun.opensearch.sdk.generated.search.*;
  13. import com.aliyun.opensearch.sdk.generated.search.general.SearchResult;
  14. import java.io.UnsupportedEncodingException;
  15. import java.nio.charset.Charset;
  16. import java.util.Map;
  17. import java.util.Random;
  18. public class testPushSearch2 {
  19. private String appName = "替换为opensearch应用名";
  20. private String tableName = "替换opensearch应用表名";
  21. private String accesskey = "替换accesskey";
  22. private String secret = "替换secret";
  23. private String host = "替换应用的API访问地址";
  24. public static void main(String[] args) {
  25. //查看文件和默认编码格式
  26. System.out.println(String.format("file.encoding: %s", System.getProperty("file.encoding")));
  27. System.out.println(String.format("defaultCharset: %s", Charset.defaultCharset().name()));
  28. //-------------数据推送示例代码-----------------
  29. //生成随机数,作为主键值
  30. Random rand = new Random();
  31. int value1 = rand.nextInt(Integer.MAX_VALUE);
  32. int value2 = rand.nextInt(Integer.MAX_VALUE);
  33. //定义Map对象存储上传文档数据,此为文档1
  34. Map<String, Object> doc1 = Maps.newLinkedHashMap();
  35. doc1.put("id", value1);
  36. String title_string = "新增数据Push方式文档1";// utf-8
  37. byte[] bytes;
  38. try {
  39. bytes = title_string.getBytes("utf-8");
  40. String utf8_string = new String(bytes, "utf-8");
  41. doc1.put("name", utf8_string);
  42. } catch (UnsupportedEncodingException e) {
  43. e.printStackTrace();
  44. }
  45. doc1.put("phone", "13712341111");
  46. int[] int_arr = {11,11};
  47. doc1.put("int_arr", int_arr);
  48. String[] literal_arr = {"Push方式新增文档1","测试Push方式新增文档1]"};
  49. doc1.put("literal_arr", literal_arr);
  50. float[] float_arr = {(float)1.1,(float)1.1};
  51. doc1.put("float_arr", float_arr);
  52. doc1.put("cate_id", 1);
  53. //新增及更新都设为ADD,不支持update,当已存在相同主键值文档时做更新,否则新增,此处作为新增
  54. JSONObject json1 = new JSONObject();
  55. json1.put(DocumentConstants.DOC_KEY_CMD, Command.ADD.toString());
  56. json1.put(DocumentConstants.DOC_KEY_FIELDS, doc1);
  57. //定义Map对象存储上传文档数据,此为文档2
  58. Map<String, Object> doc2 = Maps.newLinkedHashMap();
  59. doc2.put("id", value2);
  60. String title_string2 = "新增数据Push方式文档2";// utf-8
  61. byte[] bytes2;
  62. try {
  63. bytes2 = title_string2.getBytes("utf-8");
  64. String utf8_string2 = new String(bytes2, "utf-8");
  65. doc2.put("name", utf8_string2);
  66. } catch (UnsupportedEncodingException e) {
  67. e.printStackTrace();
  68. }
  69. doc2.put("phone", "13712342222");
  70. int[] int_arr2 = {22,22};
  71. doc2.put("int_arr", int_arr2);
  72. String[] literal_arr2 = {"Push方式新增文档2","测试Push方式新增文档2"};
  73. doc2.put("literal_arr", literal_arr2);
  74. float[] float_arr2 = {(float)2.2,(float)2.2};
  75. doc2.put("float_arr", float_arr2);
  76. doc2.put("cate_id", 1);
  77. //新增及更新都设为ADD,不支持update,当已存在相同主键值文档时做更新,否则新增,此处作为新增
  78. JSONObject json2 = new JSONObject();
  79. json2.put(DocumentConstants.DOC_KEY_CMD, Command.ADD.toString());
  80. json2.put(DocumentConstants.DOC_KEY_FIELDS, doc2);
  81. //定义Map对象测试更新文档数据,此为文档3
  82. Map<String, Object> doc3 = Maps.newLinkedHashMap();
  83. doc3.put("id", value2);
  84. String title_string3 = "更新Push文档2为doc3";// utf-8
  85. byte[] bytes3;
  86. try {
  87. bytes3 = title_string3.getBytes("utf-8");
  88. String utf8_string3 = new String(bytes3, "utf-8");
  89. doc3.put("name", utf8_string3);
  90. } catch (UnsupportedEncodingException e) {
  91. e.printStackTrace();
  92. }
  93. doc3.put("phone", "13712343333");
  94. int[] int_arr3 = {33,33};
  95. doc3.put("int_arr", int_arr3);
  96. String[] literal_arr3 = {"更新Push文档2为doc3","更新Push文档2为doc3"};
  97. doc3.put("literal_arr", literal_arr3);
  98. float[] float_arr3 = {(float)3.3,(float)3.3};
  99. doc3.put("float_arr", float_arr3);
  100. doc3.put("cate_id", 1);
  101. //新增及更新都设为ADD,不支持update,需要已存在相同主键值,此处作为更新测试
  102. JSONObject json3 = new JSONObject();
  103. json3.put(DocumentConstants.DOC_KEY_CMD, Command.ADD.toString());
  104. json3.put(DocumentConstants.DOC_KEY_FIELDS, doc3);
  105. //定义Map对象测试更新文档数据,此为文档4,删除文档只需要设置需删除文档主键值即可,此处测试删除文档1
  106. Map<String, Object> doc4 = Maps.newLinkedHashMap();
  107. doc4.put("id", value1);
  108. //此处设置删除文档处理
  109. JSONObject json4 = new JSONObject();
  110. json4.put(DocumentConstants.DOC_KEY_CMD, Command.DELETE.toString());
  111. json4.put(DocumentConstants.DOC_KEY_FIELDS, doc4);
  112. JSONArray docsJsonArr = new JSONArray();
  113. docsJsonArr.put(json1);//新增文档1
  114. docsJsonArr.put(json2);//新增文档2
  115. docsJsonArr.put(json3);//更新Push文档2为doc3
  116. docsJsonArr.put(json4);//删除文档1
  117. String docsJson = docsJsonArr.toString();
  118. //创建并构造OpenSearch对象
  119. OpenSearch openSearch = new OpenSearch(accesskey, secret, host);
  120. //创建OpenSearchClient对象,并以OpenSearch对象作为构造参数
  121. OpenSearchClient serviceClient = new OpenSearchClient(openSearch);
  122. //定义DocumentClient对象添加json格式doc数据批量提交
  123. DocumentClient documentClient = new DocumentClient(serviceClient);
  124. try {
  125. //执行推送操作
  126. OpenSearchResult osr = documentClient.push(docsJson, appName, tableName);
  127. //判断数据是否推送成功,主要通过判断2处,第一处判断用户方推送是否成功,第二处是应用控制台中有无报错日志
  128. //用户方推送成功后,也有可能在应用端执行失败,此错误会直接在应用控制台错误日志中生成,比如字段内容转换失败
  129. if(osr.getResult().equalsIgnoreCase("true")){
  130. System.out.println("用户方推送无报错!\n以下为getTraceInfo推送请求Id:"+osr.getTraceInfo().getRequestId());
  131. }else{
  132. System.out.println("用户方推送报错!"+osr.getTraceInfo());
  133. }
  134. } catch (OpenSearchException e) {
  135. e.printStackTrace();
  136. } catch (OpenSearchClientException e) {
  137. e.printStackTrace();
  138. }
  139. try {
  140. Thread.sleep(1000);//休眠1秒
  141. } catch (InterruptedException e) {
  142. e.printStackTrace();
  143. }
  144. //-------------查询上面push的文档-----------------
  145. //创建SearcherClient对象,并以OpenSearchClient对象作为构造参数
  146. SearcherClient searcherClient = new SearcherClient(serviceClient);
  147. //定义Config对象,用于设定config子句参数,用于分页或设置数据返回格式
  148. Config config = new Config(Lists.newArrayList(appName));
  149. config.setStart(0);
  150. config.setHits(30);
  151. //设置返回格式为json,目前只支持返回xml和json格式,暂不支持返回fulljson类型
  152. config.setSearchFormat(SearchFormat.JSON);
  153. // 设置搜索结果返回应用中哪些字段
  154. config.setFetchFields(Lists.newArrayList("id", "name", "phone", "int_arr", "literal_arr", "float_arr", "cate_id"));
  155. // 创建参数对象
  156. SearchParams searchParams = new SearchParams(config);
  157. // 设置查询子句,若需多个索引组合查询,需要setQuery处合并,否则若设置多个setQuery后面的会替换前面查询
  158. searchParams.setQuery("id:'" + value1 + "'|'"+value2 +"'");
  159. // 设置查询过滤条件
  160. searchParams.setFilter("cate_id<=3");
  161. // 设置sort条件
  162. Sort sorter = new Sort();
  163. sorter.addToSortFields(new SortField("id", Order.DECREASE)); //设置id字段降序
  164. sorter.addToSortFields(new SortField("RANK", Order.INCREASE)); //若id相同则以RANK升序
  165. //添加Sort对象参数
  166. searchParams.setSort(sorter);
  167. // 执行返回查询结果
  168. SearchResult searchResult;
  169. try {
  170. searchResult = searcherClient.execute(searchParams);
  171. String result = searchResult.getResult();
  172. JSONObject obj = new JSONObject(result);
  173. // 输出查询结果
  174. System.out.println(obj.toString());
  175. } catch (OpenSearchException e) {
  176. e.printStackTrace();
  177. } catch (OpenSearchClientException e) {
  178. e.printStackTrace();
  179. }
  180. }
  181. }
本文导读目录
本文导读目录
以上内容是否对您有帮助?