全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网
开放搜索

使用教程

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

使用openSearch提供搜索功能十分简单,下面给带大家迅速上手

准备工作

获取AccessKey和Secret

登录http://opensearch.console.aliyun.com ,点击 ACCESSKEY管理 查看是否已经创建了阿里云 access key id和access key secret。如果没有创建,则点击创建一套id和secret

下载php SDK并添加到项目中

在左侧栏相关下载中下载php SDK包(Github镜像即将推出)并将SDK添加到项目中

  1. <?php
  2. require_once("/path/to/CloudsearchClient.php");
  3. require_once("/path/to/CloudsearchIndex.php");
  4. require_once("/path/to/CloudsearchDoc.php");
  5. require_once("/path/to/CloudsearchSearch.php");

创建client

我们先实例化一个SDK客户端client,在下面的操作中我们都会使用到它。

  1. $access_key = "替换成自己的accesskey";
  2. $secret = "替换成自己的Secret";
  3. //杭州公网API地址:http://opensearch-cn-hangzhou.aliyuncs.com
  4. //北京公网API地址:http://opensearch-cn-beijing.aliyuncs.com
  5. $host = "http://opensearch-cn-hangzhou.aliyuncs.com";//根据自己的应用区域选择API
  6. $key_type = "aliyun"; //固定值,不必修改
  7. $opts = array('host'=>$host);
  8. $client = new CloudsearchClient($access_key,$secret,$opts,$key_type);

上传文档

在上面代码的基础上我们继续使用CloudsearchDoc类向刚创建的应用中上传一些文档,应用名称继续使用上面的$app_name。OpenSearch应用中的文档是一个json类型的字符串,结构如下:

  1. [
  2. {
  3. "fields":{},
  4. "cmd":""
  5. }
  6. ...
  7. ]

cmd字段可选的值为:ADD、DELETE、UPDATE,分别表示添加、删除以及更新一条文档;fields字段内包含文档本身的字段属性,比如在一个小说应用的结构中可能包含以下字段:title:小说的名字,body:小说主体内容,url:访问小说的地址等。

  1. $doc_obj = new CloudsearchDoc($app_name,$client);
  2. $docs_to_upload = array();
  3. for ($i = 0; $i < 10; $i++){
  4. $item = array();
  5. //指定文档操作类型为:添加
  6. $item['cmd'] = 'ADD';
  7. //添加文档内容
  8. $item["fields"] = array("id" => $i + 1,
  9. "title" => "我是一条新文档的标题",
  10. "body" => "我是一条新文档的body",
  11. "url" => "http://opensearch-cn-hangzhou.aliyuncs.com",
  12. "create_timestamp" => time());
  13. $docs_to_upload[] = $item;
  14. }
  15. //生成json格式字符串
  16. $json = json_encode($docs_to_upload);
  17. // 将文档推送到main表中
  18. echo $doc_obj->add($json,"main");

以上我们向sdk_user_demo应用中上传了10条文档

开始搜索

下面我们继续使用CloudsearchSearch类搜索一下刚才上传的数据

  1. // 实例化一个搜索类
  2. $search_obj = new CloudsearchSearch($client);
  3. // 指定一个应用用于搜索
  4. $search_obj->addIndex($app_name);
  5. // 指定搜索关键词
  6. $search_obj->setQueryString("default:标题");
  7. // 指定返回的搜索结果的格式为json
  8. $search_obj->setFormat("json");
  9. // 执行搜索,获取搜索结果
  10. $json = $search_obj->search();
  11. // 将json类型字符串解码
  12. $result = json_decode($json,true);
  13. print_r($result);
  14. ?>

这样我们就完成了一个简单的搜索功能了!

完整示例代码

大家可以直接复制下面代码,将其中的access key和secret替换成自己的,下载SDK代码,并解压到下面代码文件的同级目录中就可以体验一下OpenSearch了。

  1. <?php
  2. require_once("php_v2.0.4/CloudsearchClient.php");
  3. require_once("php_v2.0.4/CloudsearchIndex.php");
  4. require_once("php_v2.0.4/CloudsearchDoc.php");
  5. require_once("php_v2.0.4/CloudsearchSearch.php");
  6. $access_key = "替换成自己的accesskey";
  7. $secret = "替换成自己的Secret";
  8. //杭州公网API地址:http://opensearch-cn-hangzhou.aliyuncs.com
  9. //北京公网API地址:http://opensearch-cn-beijing.aliyuncs.com (2015年4月初开放)
  10. $host = "http://opensearch-cn-hangzhou.aliyuncs.com";
  11. $key_type = "aliyun"; //固定值,不必修改
  12. $opts = array('host'=>$host);
  13. // 实例化一个client 使用自己的accesskey和Secret替换相关变量
  14. $client = new CloudsearchClient($access_key,$secret,$opts,$key_type);
  15. $app_name = "sdk_user_demo";
  16. // 实例化一个应用类index_obj
  17. $index_obj = new CloudsearchIndex($app_name,$client);
  18. $result = $index_obj->createByTemplateName("builtin_novel");
  19. // 实例化一个文档类 doc_obj 指定应用名称
  20. $doc_obj = new CloudsearchDoc($app_name,$client);
  21. $docs_to_upload = array();
  22. for ($i = 0; $i < 10; $i++){
  23. $item = array();
  24. $item['cmd'] = 'ADD';
  25. $item["fields"] = array("id" => $i + 1,
  26. "title" => "我是一条新文档的标题",
  27. "body" => "我是一条新文档的body",
  28. "url" => "http://opensearch.aliyuncs.com",
  29. "create_timestamp" => time());
  30. $docs_to_upload[] = $item;
  31. }
  32. $json = json_encode($docs_to_upload);
  33. // echo $doc_obj->add($json,"main");
  34. // 实例化一个搜索类 search_obj
  35. $search_obj = new CloudsearchSearch($client);
  36. // 指定一个应用用于搜索
  37. $search_obj->addIndex($app_name);
  38. // 指定搜索关键词
  39. $search_obj->setQueryString("default:标题");
  40. // 指定返回的搜索结果的格式为json
  41. $search_obj->setFormat("json");
  42. // 执行搜索,获取搜索结果
  43. $json = $search_obj->search();
  44. // 将json类型字符串解码
  45. $result = json_decode($json,true);
  46. print_r($result);

调试

通过上面的操作我们已经可以使用基本的搜索功能了,但是优化搜索、提高搜索结果相关性是一个漫长的的过程,需要我们不断试错和迭代来一点点改进。在这个过程中如果遇到问题或者发现结果与预期不一致时可以通过下面的接口获得请求的详细信息,可以通过这些信息排查问题。特别是当遇您到问题,在旺旺群、QQ群中寻求帮助的时候,根据调试信息我们可以迅速帮您定位到问题所在。

  1. $client->getRequest();
本文导读目录