概述
在进行开放搜索SDK的使用过程中,主要的查询分析目前官方已经有相对完整的示例教程,此处不再赘述。这里主要介绍一下如何使用SDK上传,更新及删除文档数据。
示例
1、pom.xml
<dependency>
<groupId>com.aliyun.opensearch</groupId>
<artifactId>aliyun-sdk-opensearch</artifactId>
<version>3.2.0</version>
</dependency>
2、添加文档操作
import com.aliyun.opensearch.DocumentClient;
import com.aliyun.opensearch.OpenSearchClient;
import com.aliyun.opensearch.sdk.dependencies.com.google.common.collect.Maps;
import com.aliyun.opensearch.sdk.dependencies.org.json.JSONArray;
import com.aliyun.opensearch.sdk.dependencies.org.json.JSONObject;
import com.aliyun.opensearch.sdk.generated.OpenSearch;
import com.aliyun.opensearch.sdk.generated.commons.OpenSearchResult;
import com.aliyun.opensearch.sdk.generated.document.Command;
import com.aliyun.opensearch.sdk.generated.document.DocumentConstants;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.util.Map;
public class testAddDemo {
//参数设置
private static String appName = "********";
private static String accesskey = "********";
private static String secret = "********";
private static String host = "http://opensearch-cn-qingdao.aliyuncs.com";
private static String tableName = "tabname";
public static void main(String[] args) {
//查看文件和默认编码格式
System.out.println(String.format("file.encoding: %s", System.getProperty("file.encoding")));
System.out.println(String.format("defaultCharset: %s", Charset.defaultCharset().name()));
//-------------数据推送示例代码-----------------
int value1 = 1;
Map<String, Object> doc1 = Maps.newLinkedHashMap();
doc1.put("id", value1);
String title_string = "新增数据Push方式文档1";// utf-8
byte[] bytes;
try {
bytes = title_string.getBytes("utf-8");
String utf8_string = new String(bytes, "utf-8");
doc1.put("name", utf8_string);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
doc1.put("phone", "13712341111");
int[] int_arr = {11,11};
doc1.put("int_arr", int_arr);
String[] literal_arr = {"Push方式新增文档1","测试Push方式新增文档----ADD"};
doc1.put("literal_arr", literal_arr);
float[] float_arr = {(float)1.1,(float)1.1};
doc1.put("float_arr", float_arr);
doc1.put("cate_id", 1);
//标准版不支持update,需要使用ADD进行全字段更新;高级版支持update,部分字段更新。
JSONObject json1 = new JSONObject();
json1.put(DocumentConstants.DOC_KEY_CMD, Command.ADD.toString());//添加操作
json1.put(DocumentConstants.DOC_KEY_FIELDS, doc1);
//创建并构造OpenSearch对象
OpenSearch openSearch = new OpenSearch(accesskey, secret, host);
//创建OpenSearchClient对象,并以OpenSearch对象作为构造参数
OpenSearchClient serviceClient = new OpenSearchClient(openSearch);
//定义DocumentClient对象添加json格式doc数据批量提交
DocumentClient documentClient = new DocumentClient(serviceClient);
try {
JSONArray docsJsonArr = new JSONArray();
docsJsonArr.put(json1);//新增文档1
String docsJson = docsJsonArr.toString();
//执行删除操作
OpenSearchResult osr = documentClient.push(docsJson, appName, tableName);
//判断数据是否推送成功,主要通过判断2处,第一处判断用户方推送是否成功,第二处是应用控制台中有无报错日志
//用户方推送成功后,也有可能在应用端执行失败,此错误会直接在应用控制台错误日志中生成,比如字段内容转换失败
if(osr.getResult().equalsIgnoreCase("true")){
System.out.println("用户方推送无报错!\n以下为getTraceInfo推送请求Id:"+osr.getTraceInfo().getRequestId());
}else{
System.out.println("用户方推送报错!"+osr.getTraceInfo());
}
} catch (Exception e) {
e.printStackTrace();
}
try {
Thread.sleep(1000);//休眠1秒
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
- 测试结果
3、更新文档操作
int value1 = 1;
//定义Map对象更新文档数据,此为文档1
Map<String, Object> doc1 = Maps.newLinkedHashMap();
doc1.put("id", value1);
String[] literal_arr = {"Push方式新增文档1","测试Push方式新增文档----UPDATE"};
doc1.put("literal_arr",literal_arr);
//标准版不支持update,需要使用ADD进行全字段更新;高级版支持update,部分字段更新。
JSONObject json1 = new JSONObject();
json1.put(DocumentConstants.DOC_KEY_CMD, Command.UPDATE.toString());
json1.put(DocumentConstants.DOC_KEY_FIELDS, doc1);
- 测试结果
4、删除操作
int value1 = 1;
//定义Map对象存储上传文档数据,此为文档1 删除操作,仅仅设置id主键的值
Map<String, Object> doc1 = Maps.newLinkedHashMap();
doc1.put("id", value1);
JSONObject json1 = new JSONObject();
json1.put(DocumentConstants.DOC_KEY_CMD, Command.DELETE.toString());//定义删除操作
json1.put(DocumentConstants.DOC_KEY_FIELDS, doc1);
- 测试结果