阅读626 返回首页    go 微信


Array数组类型说明__功能篇_最佳实践_开放搜索-阿里云

本文主要对Array类型的使用场景、数据推送及搜索语法进行系统的介绍,方便大家理解。

什么场景下适合使用ARRAY类型?

Array类型即为数组类型,数组类型即由相同类型的若干个元素组织在一起的数据,期望在搜索的时候对于每一个元素都可以执行单独的查询。比如小说的标签tags,包含“悬疑”、“穿越”、“古典”,希望在搜索“悬疑”的时候能找到该篇小说。

如何推送ARRAY类型的数据?

目前OpenSearch支持多种方式的数据推送方式,那我们就从每个途径来分开阐述如何进行数据推送。

API方式

ARRAY类型需要采用JsonArray的方式来上传数据。 如:

[{"fields": { "id": "0","int_array": [14,85],"float_array": [14.0,85.0],"string_array": ["abc","xyz"]},"cmd": "ADD"}]

具体数据上传接口请参考API参考手册-数据处理相关

SDK方式

这里以php sdk为例,其他sdk做法类似。

<?php
require('php_2.0.4/CloudsearchClient.php');
require('php_2.0.4/CloudsearchIndex.php');
require('php_2.0.4/CloudsearchDoc.php');

define('ACCESSKEYID', '您的阿里云AccessKeyId');
define('SECRET', '您的阿里云AccessKeySecert');
define('APP_NAME', '您的应用名称');
define('KEY_TYPE','aliyun');     #固定值

#每个应用具体host值请参考应用管理->应用详情->API入口,打开debug接口方便调试
$client = new CloudsearchClient(
    ACCESSKEYID,
    SECRET,
    array('host' => 'https://opensearch-cn-hangzhou.aliyuncs.com', 'debug' =>true),   
    KEY_TYPE
);   
$doc = new CloudsearchDoc(APP_NAME, $client);
$json = <<<EOF
[{"fields": { "id": "0","int_array": [14,85],"string_array": ["abc","xyz"]},"cmd": "ADD"}]
EOF;
echo $doc->add($json, '您要推送数据的表名');
echo $client->getRequest(); #打印发送的请求串,前提是CloudsearchClient的debug打开
?>

数据源方式

数据源配置允许用户对于数据源数据进行多种格式的解析操作,如果定义了ARRAY类型的字段,可以在该字段上选择MultiValueSpliter插件,定义好多值分隔符,比如上例中的tags,在数据库表中字段内容为:“穿越,悬疑,言情”,那么多值分隔符为英文逗号:“,”,如图所示即可。该插件会自动将数据库中字段转化成为引擎识别的ARRAY类型。


ARRAY类型如何进行检索?能实现怎样的效果?

ARRAY类型的每一个元素都可以单独访问,不管是用在query子句,还是filter子句,如上例中的tags字段(内容为:穿越,悬疑,言情),可以通过query=tags:'穿越'来找到该文档;也可以通过query=title:'步步惊心'&&filter=tags="穿越",来实现标签为“穿越”的名字包含“步步惊心”的小说。同时需要注意一点的是,搜索结果对于Array类型是按照字符串返回的,元素之间使用't'分隔,而不是数组。



相关问题

Q: 为什么没有text_array类型,text与string_array有什么区别?
A: text类型(包含text、sws_text、nws_text、mws_text)涉及到分词,本身支持的是模糊搜索,所以没有数组的概念,而string_array指的是每个元素的精确匹配,很可能这里的单个元素本身是由多个词组组成的,但是没关系要求的是全部匹配。

Q: 有没有方法获得array类型的元素个数?
A: 系统提供了fieldlen(array_field)的参数,可以获取元素个数。

最后更新:2016-11-23 17:16:06

  上一篇:go 相关性实战__功能篇_最佳实践_开放搜索-阿里云
  下一篇:go 模糊搜索详解__功能篇_最佳实践_开放搜索-阿里云