閱讀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 模煳搜索詳解__功能篇_最佳實踐_開放搜索-阿裏雲