全部产品
开放搜索

文档操作

更新时间:2017-06-07 13:26:11   分享:   


构造函数

接口描述

CloudsearchDoc类是非线程安全的,请每次调用时单独实例化一个实例使用

参数描述

参数名称 类型 描述
indexName String 指定操作的应用名。
client CloudsearchClient CloudsearchClient实例。

接口定义

CloudsearchDoc(String indexName, CloudsearchClient client)

查看文档详情

接口描述

根据doc id获取doc的详细信息。

参数描述

参数名称 类型 描述
docId String 指定的doc id。

返回结果

  • 返回API返回的结果。

异常描述

  • IOException

  • ClientProtocolException

接口定义

String detail(String docId) throws ClientProtocolException, IOException

添加文档

接口描述

设置需要添加的属性名称和属性值,用于生成符合文档格式的数据,所有更新结束之后需要调用push(String tableName)方法

参数描述

参数名称 类型 描述
fields Map<String, Object> 字段名和字段值的map

异常描述

  • JSONException

接口定义

void add(Map<String, Object> fields) throws JSONException

更新文档

接口描述

设置需要更新的属性名称和属性值,用于生成符合文档格式的数据,所有更新结束之后需要调用push(String tableName)方法

参数描述

参数名称 类型 描述
fields Map<String, Object> 字段名和字段值的map

异常描述

  • JSONException

接口定义

void update(Map<String, Object> fields) throws JSONException

删除文档

接口描述

设置需要删除的属性名称和属性值,用于生成符合文档格式的数据,所有更新结束之后需要调用push(String tableName)方法

参数描述

参数名称 类型 描述
fields Map<String, Object> 字段名和字段值的map

异常描述

  • JSONException

接口定义

void remove(Map<String, Object> fields) throws JSONException

执行文档变更操作(1)

接口描述

针对文档的操作add、update和remove会生成符合文档格式的数据,通过调用此接口用户提交的文档变更才会真正生效。

参数描述

参数名称 类型 描述
tableName String 表名称

返回结果

  • 返回的数据

异常描述

  • IOException

  • ClientProtocolException

接口定义

String push(String tableName) throws ClientProtocolException, IOException

执行文档变更操作(2)

接口描述

通过此接口可以直接将符合文档格式的数据直接推送到指定的表中

参数描述

参数名称 类型 描述
docs String 此docs为用户push的数据,此字段为json类型的字符串。
tableName String 操作的表名。

返回结果

  • 请求API并返回相应的结果。

异常描述

  • IOException

  • ClientProtocolException

接口定义

String push(String docs, String tableName) throws ClientProtocolException, IOException

通过文件导入数据(1)

接口描述

导入HA3 doc数据到指定的应用的指定表中

文件编码:UTF-8

支持CMD: add, delete, update。如果给出的字段不是全部,add会在未给出的字段加默认值,

覆盖原值;update只会更新给出的字段,未给出的不变。

文件分隔符:

<pre>

编码--------------描述-----------------------显示形态--------------------

"\x1E\n" 每个doc的分隔符. ^^(接换行符)

"\x1F\n" 每个字段key和value分隔. ^_(接换行符)

"\x1D" 多值字段的分隔符. ^]

</pre>

示例:

<pre>

CMD=add^_

url=http://www.opensearch.console.aliyun.com^_

title=开放搜索^_

body=xxxxxxxxx^

multivalue_feild=123^]1234^]12345^

^^

CMD=update^_

...

</pre>

NOTE: 文件结尾的分隔符也必需为"^^\n",最后一个换行符不能省略。

参数描述

参数名称 类型 描述
filePath String 指定的文件路径。
tableName String 指定push数据的表名。

返回结果

  • 返回成功或者错误信息。

异常描述

  • JSONException

接口定义

String pushHADocFile(String filePath, String tableName) throws JSONException

通过文件导入数据(2)

接口描述

导入HA3 doc数据到指定的应用的指定表中

参数描述

参数名称 类型 描述
filePath String 指定的文件路径。
tableName String 指定push数据的表名。
offset long 文档数据的偏移量,小于设定的offset行号的文档将被跳过

返回结果

  • 返回成功或者错误信息。

异常描述

  • JSONException

接口定义

String pushHADocFile(String filePath, String tableName, long offset) throws JSONException

获取上次请求的信息

返回结果

  • String

接口定义

String getDebugInfo()

文档操作使用示例

应用结构

首先我们回顾一下我们之前创建的应用的结构:

名称 含义
1 id 标示一个主键id,在应用中唯一的字段,primary_key
2 type_id 类型的id
3 cat_id 分类id,类似于,1标示体育,2、科技,3、军事等等
4 title 资讯的标题
5 body 资讯的内容
6 url 资讯的url连接
7 author 作者
8 thumbnail 缩略图
9 source 来源
10 create_timestamp 资讯的创建时间
11 update_timestamp 资讯的最后修改时间
12 hit_num 点击次数
13 focus_count 关注次数
14 grade 等级
15 comment_count 评论数
16 tag 标签

文档概念

OpenSearch的文档是一个json类型的字符串,结构如下:

[
    {
        fields:{...},
        cmd:"..."
    }
    ...
]

一条文档是由fields字段和cmd字段构成的一个结构体,其中fields字段内包含文档的核心数据,cmd表示针对此条文档所做的操作,对文档的操作包括添加(add),更新(update)和删除(delete)三种。我们创建的news应用的一条文档示例如下:

[
   {
    "fields": {
      "id": "0",
      "type_id": 34,
      "cat_id": 10,
      "title": "阿里云开放搜索助力企业搜索应用",
      "body": "广大中小企业都有各种结构化的数据需要进行检索,目前一般采用数据库本身提供的搜索功能或者利用open source的搜索软件搭建,这样的做法不但会消耗网站本身的资源,性能也会很容易成为问题,而且相关性通常也不够好。我们的产品的目的是要利用阿里云先进的云计算和搜索技术向广大中小企业提供低成本,高质量,高性能,可定制的数据搜索解决方案。本项目和云搜索的通用解决方案目标略有不同,主要区别为本项目主要针对用户的结构化数据进行搜索,云搜索的通用解决方案则主要是针对网页型数据为处理对象。",
      "url": "http://opensearch.console.aliyun.com",
      "author": "阿里云",
      "thumbnail": "http://opensearch.console.aliyun.com",
      "source": "新浪科技",
      "create_timestamp": 1426589415,
      "update_timestamp": 1426589415,
      "hit_num": 700,
      "focus_count": 31,
      "grade": 96,
      "comment_count": 68,
      "tag": "搜索"
    },
    "cmd": "ADD"
  },
]

文档操作

在建立好应用之后,我们需要把自己应用的数据上传到应用中,并且在运营的过程中对文档的内容进行维护。这里涉及到的文档相关的操作包括以下四种:添加文档、查看文档、更新文档和删除文档。

添加文档

将文档添加到OpenSearch应用的表中对应的操作cmd是ADD,在Java SDK中可以使用 add接口完成文档添加操作: 例如上面的fields字段的内容是从数据库中读取的,存放在一个Map<String,Object>类型的数据结构里,可以直接使用add接口生成符合文档格式的json字符串,再调用push接口完成上传;

  client.add(fields);
  client.push("main");//main是上传到的表名

如果已经生成了符合文档格式的json_string 可以直接调用push接口实现上传:

  client.push(json_string,"main");

查看文档

将文档上传至应用后可以通过文档id使用detail接口查看文档内容:

  doc.detail("1");

更新文档

更新文档时 文档中cmd字段对应的值为update,并且在fields字段中要提供待更新的文档的id,然后调用push接口使其生效:

    doc.update(fields);
    doc.push("main");//main为待更新的文档所在的表名

删除文档

删除文档时文档中的cmd字段对应的值为delete,需要提供待删除的文档的id,然后调用push接口

  Map<String,Object> fields = new HashMap<String,Object>();
  fields.put("id",1);
    doc.remove(fields);
    doc.push("main");//main为待删除文档所在的表名

使用文件来上传文档

除了上面的方法还可以通过文件量,小于设定的offset行号的doc将被跳过 导入HA3 doc数据到指定的应用的指定表中

文件编码:UTF-8

支持CMD: add, delete, update。如果给出的字段不是全部,add会在未给出的字段加默认值,覆盖原值;update只会更新给出的字段,未给出的不变。

文件分隔符:

<pre>

编码--------------描述-----------------------显示形态--------------------

"\x1E\n" 每个doc的分隔符. ^^(接换行符)

"\x1F\n" 每个字段key和value分隔. ^_(接换行符)

"\x1D" 多值字段的分隔符. ^]

</pre>

示例:

<pre>

CMD=add^_

url=http://www.opensearch.console.aliyun.com^_

title=开放搜索^_

body=xxxxxxxxx^

multivalue_feild=123^]1234^]12345^

^^

CMD=update^_

...

</pre>

注意:文件结尾的分隔符也必需为"^^\n",最后一个换行符不能省略。

    doc.pushHADocFile(file_path,table_name);

使用HA类型文件推送文档时还可以指定从文件中的某个位置开始推送,对应的接口为:

    doc.pushHADocFile(file_path,talbe_name,offset);

其中:offset 文档数据的偏移量,小于设定的offset行号的doc将被跳过

调试接口

CloudsearchDoc类内置了一个调试接口,通过调用调试接口可以获得操作发出的请求内容,当我们操作文档时发现与预期不符时可以通过此接口查看请求细节。

    debugInfo = doc.getDebugInfo();
本文导读目录
本文导读目录
以上内容是否对您有帮助?