开放搜索文档处理示例教程

概述

在进行开放搜索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);
  • 测试结果
    开放搜索文档处理示例教程

更多参考

Push推送Demo

开放搜索Java SDK 使用教程

搜索Demo

上一篇:thinkphp中模板volist三层循环


下一篇:HTML5在豆瓣的各种应用