配置环境变量
配置环境变量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
重要
阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维,具体操作,请参见创建RAM用户。
创建AccessKey ID和AccessKey Secret,请参考创建AccessKey。
如果您使用的是RAM用户的AccessKey,请确保主账号已授权AliyunServiceRoleForOpenSearch服务关联角色,请参考OpenSearch-行业算法版服务关联角色,相关文档参考访问鉴权规则。
请不要将AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
Linux和macOS系统配置方法:
执行以下命令,其中,
<access_key_id>
需替换为您RAM用户的AccessKey ID,<access_key_secret>
替换为您RAM用户的AccessKey Secret。export ALIBABA_CLOUD_ACCESS_KEY_ID=<access_key_id> export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<access_key_secret>
Windows系统配置方法
新建环境变量文件,添加环境变量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET,并写入已准备好的AccessKey ID和AccessKey Secret。
重启Windows系统生效。
创建Config配置头文件
Config 页面中的内容将作为后续的查询推送文档的头文件,其中包含AK,host,应用名,下拉名称及 options 选项,等重要参数信息
<?php
//引入头文件
require_once("../OpenSearch/Autoloader/Autoloader.php");
use OpenSearch\Client\OpenSearchClient;
// 用户识别信息
// 从环境变量读取配置的AccessKey ID和AccessKey Secret,
// 运行代码示例前必须先配置环境变量,参考文档上面“配置环境变量”步骤
// 替换对应的access key id
$accessKeyId = getenv('ALIBABA_CLOUD_ACCESS_KEY_ID');
//替换对应的access secret
$secret = getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET');
//替换为对应区域api访问地址,可参考应用控制台,基本信息中api地址
$endPoint = '<region endPoint>';
//替换为应用名
$appName = '<app name>';
//替换为下拉提示名称
$suggestName = '<suggest name>';
//开启调试模式
$options = array('debug' => true);
//创建OpenSearchClient客户端对象
$client = new OpenSearchClient($accessKeyId, $secret, $endPoint, $options);
开始scroll搜索
下列展示了scroll的搜索功能实例代码
<?php
header("Content-Type:text/html;charset=utf-8");
//引入头文件
require_once("Config.inc.php");
use OpenSearch\Client\SearchClient;
use OpenSearch\Util\SearchParamsBuilder;
$searchClient = new SearchClient($client);
//创建参数对象,并指定对应参数
$params = new SearchParamsBuilder();
//设置每次scroll查询召回文档数,无需设置start参数
$params->setHits(1);
//设置应用名称
$params->setAppName('替换为应用名');
//设置查询query
$params->setQuery("name:'搜索'");
//设置返回格式为FULLJSON,目前scroll只支持返回JSON和FULLJSON格式
$params->setFormat("fulljson");
//V3 版 PHP SDK 中的 scroll查询方法,只支持单字段排序,且只能是int字段类型,通常是设置主键值进行生序或降序,设置该排序后,可以避免查询期间因为数据发生变更而导致文档排序发生变化出现重复召回文档
$params->addSort('id', SearchParamsBuilder::SORT_INCREASE);
//设置文档过滤条件
$params->setFilter('id>0');
//设置需返回哪些字段
$params->setFetchFields(array('id','name','phone','int_arr','literal_arr','float_arr','cate_id'));
//设置下次scroll发送请求超时时间,用于scroll方法查询,此处为第一次访问,用于获取scrollId
$params->setScrollExpire('3m');
//执行查询并返回信息
$ret = $searchClient->execute($params->build())->result;
for($i=0;$i<json_decode($ret)->result->viewtotal;$i++){
//通过上面第一次查询返回的scrollId,作为查询参数获取数据
$params->setScrollId(json_decode($ret)->result->scroll_id);
//再次执行查询并返回信息
$ret = $searchClient->execute($params->build())->result;
//打印返回信息的内容
print_r($ret.'<br/><br/>');
}