开发者社区> 问答> 正文

【阿里云产品公测】开放搜索服务之 智能聊天实现

需求:基本实现智能聊天!


最近在开发一款机器人,希望实现基本的聊天功能,词库是有的,但是如果是做完全匹配这个出来的效果很悲催,

比如词库:你好,回答是:哈哈,很好啊.  
如果问:你好?,这时候词库没有就无法回答。


一直在考虑怎么实现,当看到阿里的opensearch之后就感觉:这个就是我想要的


之前没有研究过,只听过搜索引擎,所以我是这块的小白。感觉很高大上,什么分词啊,匹配啊。。。专业名词我就不用了因为我不专业哈哈


按照惯例依然附上一张 实现效果图:

[attachment=62968]

[attachment=62969]









准备工作



1   既然是公测自然的要申请公测资格这个就不多说了。现在申请还是比较容易的。



2   然后就是去看看他的帮助文档了。opensearch的帮助文档相对其他产品的帮助文档要详细很多。包括快速入门,详细说明,相信小白跟着文档就可以慢慢弄明白。



3    既然是java sdk 体验那么肯定就是下载 java sdk了。很简单在下载中心直接下载就可以了。(下载中心在控制台,这个貌似和别的公测产品不一样)

这里就不贴好多图了。建议去看一下文档非常详细的。







开始体验



既然是要应用到我的应用,当然要在本地测试一下,
opensearch是对外网的,所以来说不止针对阿里云的用户可以使用,只要你有搜索的需求都可以使用
首先当然是新建一个项目,当然你也可以直接在你的项目中直接测试。
然后将sdk导入项目。
(以上感觉都是都废话哈啊哈)


在做下步之前最好吧这个文档看一下   点击这里  


我们会用到的几个类文件就在这里了,


其中包括几个主要操作,


创建应用,设置应用
以上两个操作建议在控制台直接修改,这样更直观,包括设置主键,多表。搜索项等等。这里参考 官方文档吧。我没有使用sdk常见应用。(用最短的时间实现功能才是我的需求)


上传数据,更新数据
应用创建完毕肯定要上传数据的,这里阿里提供了一个很好的地方就是根据你设置的数据可是生成几个模板,你可以下载,然后看一下应该组装为什么样子的。
我的数据格式很简单
[attachment=62971]
搜索体验,简单就好!
只有一张主表,三个字段,id主键,wen:问话,用来搜索。 da:回答,用来回答的内容,不会建立索引。



//看到实例化的方法有好几个,但是别的不知道怎么实现
    //这里实例化的时候我使用的是这个方法,因为的是阿里云的账号,从控制台获取 key secret就可以了。剩下两个一个我填空,一个是固定值
    CloudsearchClient cc = new CloudsearchClient(key, secret, null, KeyTypeEnum.ALIYUN);
    
    CloudsearchDoc cd=new CloudsearchDoc("test",cc);//这里两个参数一个是应用名,一个是客户端
    Map fields=new HashMap<String, Object>();
    fields.put("id", "1");
    fields.put("wen", "你好么");
    fields.put("da", "哈哈,很好");
    //以上是按照自己的数据结构添加
    
    
    cd.add(fields);//添加一条数据
    
    //这里需要说的是,可以添加多条,然后一起提交
    
    cd.push("main");//发送数据

上传文档其实很简单,我使用了最简单的实现。

[attachment=62975]



我上传了词库8000多条。




搜索
然后就是搜索的实现了
//看到实例化的方法有好几个,但是别的不知道怎么实现
    //这里实例化的时候我使用的是这个方法,因为的是阿里云的账号,从控制台获取 key secret就可以了。剩下两个一个我填空,一个是固定值
    CloudsearchClient cc = new CloudsearchClient(key, secret, null, KeyTypeEnum.ALIYUN);
    
    String resultJson = "";
    String resultDa = "";
    try {
        CloudsearchSearch search = new CloudsearchSearch(cc);
        List<String> indexList = new ArrayList<String>();
        indexList.add("duihua");// 这里是简历应用的名字
        search.addIndex(indexList);//将应用索引加入,这里是可以加入多个的
        search.setQueryString("default:'你吃饭了么?'");//搜索制定的次
        search.setFormat("json");//返回格式,我还是比较喜欢json
        resultJson = search.search();
    } catch (MalformedURLException e1) {
        e1.printStackTrace();
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    System.out.println(resultJson);

只有以上这几行就实现了搜索功能功能。
这就基本实现了我的功能是不是好简单。几行代码实现了一个高大上的搜索引擎,以前是想都不敢想的。

体验总结





当然也是有些问题,就是目前搜索的召回是全匹配,感觉不太好,一下是图
[attachment=62977]
[attachment=62978]
[attachment=62979]









这里第三个搜索竟然是没有结果的,这这这!!怎么可以,这个问题在论坛已经提问了 连接 ,官方回答是马上就会上这个功能,表示很期待。





弄到这里,难道我的聊天计划要泡汤了!!?》??怎么可以!!




认真了的查看了一下文档,在群里询问了大拿,搜索语法支持或操作,default:'你吃饭'|'了么'  这种实现就可以实现或的召回!



[attachment=62981]




那么问题来了!!  这个分词怎么搞!!阿里云没有专门的分词接口啊!!!只能去去搜!!


免费的分词api,百度第一条就是,很幸福的去测试了。可以用大家需要也可以试试
http://5.tbip.sinaapp.com/api.php?str=%E6%98%8E%E5%A4%A9%E6%98%9F%E6%9C%9F%E5%A4%A9&type=str


这个是在sae上部署的。(后来很悲催的发现,竟然有频率限制,稍微快一些就609.。。我去) 只好放弃。


继续寻找百般努力之下终于又找到一个
http://www.xunsearch.com/scws/api.php  


经过测试,这个可以用。。


然后就是集成到我的机器人了







效果你们也看到了机器人的集成就不贴了哈哈。反正是现在实现了功能。




另外在体验的过程中,感觉有个地方很是高大上,需要一定的基础才能搞定,那就是排序的算法问题,
opensearch支持复杂的算法,实现你不同的排序需求,
[attachment=62982]
[attachment=62983]
[attachment=62984]


目前这块还没有搞定,感觉需要一个慢慢的了解过程,不过目前的默认模式已经基本满足我的需求。







建议&意见






1,关于非全部匹配的召回,希望可以尽快上线。
2,是否可以开放分词接口,
3,排序算法上是否可以有更多的文档给予一定的讲解,很多人这方面还是比较弱的
4,文档的管理不知道是否可以做一个展示,比如我有8000调数据,是否可以有个地方让我看到都添加了什么数据。
5,opensearch 应该是支持外部网站使用的,但是在文档上没有体现,我在实例化的时候就出现了一些问题,建议这块做一些说明。










展开
收起
啊里新人 2014-10-21 10:41:20 34792 0
13 条回答
写回答
取消 提交回答
  • 恭喜楼主 http://weibo.com/p/1001603779419029283793

    -------------------------

    后续Opensearch将陆陆续续发布更多功能,你的机器人到时候可以更加智能

    2014-11-22 11:55:32
    赞同 展开评论 打赏
  • Re【阿里云产品公测】开放搜索服务之智能聊天实现
    2014-11-18 13:23:38
    赞同 展开评论 打赏
  • Re【阿里云产品公测】开放搜索服务之智能聊天实现
    太详细了,我很喜欢啊哈哈
    2014-11-10 07:56:26
    赞同 展开评论 打赏
  • Re【阿里云产品公测】开放搜索服务opensearchjavajdk应用体验之机器人
    引用第5楼zhengmay于2014-10-21 19:14发表的 Re:【阿里云产品公测】开放搜索服务 opensearch java jdk 应用体验之 机器人 .. :
    1,关于非全部匹配的召回,希望可以尽快上线。 吧
    ---已经排期,预计12月左右上线。

    2,是否可以开放分词接口;
    ---以后会考虑把分词结果返回给用户,这样应该可以实现你的功能吧。单独的api接口暂时没计划,这部分不是opensearch的方向;
    .......

    @ zhengmay
    支持推出分词API,这个我也有需求(强烈)。可以先考虑在add时返回分词
    2014-11-02 12:18:21
    赞同 展开评论 打赏
  • 能开源吗?

    -------------------------

    进过一周测试,这个机器人很棒!

    2014-11-01 20:31:50
    赞同 展开评论 打赏
  • 阿里云用户
    Re【阿里云产品公测】开放搜索服务之智能聊天实现
    支持
    2014-10-29 12:39:49
    赞同 展开评论 打赏
  • Re【阿里云产品公测】开放搜索服务之智能聊天实现
    支持支持!支持支持!
    2014-10-28 13:43:33
    赞同 展开评论 打赏
  • Re【阿里云产品公测】开放搜索服务之智能聊天实现
    2014-10-27 21:59:40
    赞同 展开评论 打赏
  • Re【阿里云产品公测】开放搜索服务之智能聊天实现
    支持支持!
    2014-10-27 19:50:10
    赞同 展开评论 打赏
  •     
    2014-10-27 19:43:48
    赞同 展开评论 打赏
  • 阿里云开放搜索产品专家,专注于企业级搜索方案解决
    Re:【阿里云产品公测】开放搜索服务 opensearch java jdk 应用体验之 机器人 ..
    1,关于非全部匹配的召回,希望可以尽快上线。 吧
    ---已经排期,预计12月左右上线。

    2,是否可以开放分词接口;
    ---以后会考虑把分词结果返回给用户,这样应该可以实现你的功能吧。单独的api接口暂时没计划,这部分不是opensearch的方向;

    3,排序算法上是否可以有更多的文档给予一定的讲解,很多人这方面还是比较弱的
    ---目前的文档已经有详细的说明和各个feature的用户及适用场景,我理解你说的应该是怎么跟实际场景做对应吧,这部分我们会加强,你可以看下导入模板中是如何设计的,应该能明白。

    4,文档的管理不知道是否可以做一个展示,比如我有8000调数据,是否可以有个地方让我看到都添加了什么数据。
    ---是说把目前所有的文档主键列出来吗?这个不是opensearch的重点呢,如果数据量非常大的话,这个功能是不太现实的。

    5,opensearch 应该是支持外部网站使用的,但是在文档上没有体现,我在实例化的时候就出现了一些问题,建议这块做一些说明。
    ---支持外部网站使用这个是什么意思呢?
    2014-10-21 19:14:49
    赞同 展开评论 打赏
  • Re:【阿里云产品公测】开放搜索服务 opensearch java jdk 应用体验之 机器人 ..
    聪明的小机器人,支持他,就给他投票 http://bbs.aliyun.com/read/178799.html

    -------------------------

    已推广至阿里云微博
    互动地址:http://weibo.com/1644971875/BsMbsdqcc?from=page_1006061644971875_&type=comment

    2014-10-21 19:10:54
    赞同 展开评论 打赏
  • Re:【阿里云产品公测】开放搜索服务 opensearch java jdk 另类体验之 机器人 ..
    快来阿里云官方群体验小机器人吧 阿里云•云上梦工厂 99206500

    -------------------------

    Re:【阿里云产品公测】开放搜索服务 opensearch java jdk 另类体验之 机器人 ..
    占楼补充

    -------------------------

    Re:【阿里云产品公测】开放搜索服务 opensearch java jdk 应用体验之 机器人 ..
    快上墙,快投票哈啊哈

    -------------------------

    回 5楼(zhengmay) 的帖子
    感谢一一回答,

    如果是产品定位问题 那就没法了。


    最后那个,我在sdk源码中看到对client的实例化还有别的方式,不是使用key,secret 方式,

    并且我实例化的时候最后还添加了一个阿里云的标志,固定的,既然添加这个,那么就是肯定还有别的参数。 那么不就是还有别的实例化方式么?

    我的理解正确么

    -------------------------

    回 6楼(trcher) 的帖子
    我是一字一句的看完了你的回复。。。。

    -------------------------

    回 10楼(邪少) 的帖子
    同意,有时间搞一下~也欢迎你来群里体验

    -------------------------

    我是来赚云币的

    -------------------------

         求投票
    http://bbs.aliyun.com/read/178799.html?spm=5176.7189909.0.0.3CRUQD

    24
    33
    18

    -------------------------

    Re:Re【阿里云产品公测】开放搜索服务之智能聊天实现
    引用第17楼nicho于2014-10-28 13:43发表的 Re【阿里云产品公测】开放搜索服务之智能聊天实现 :
    支持支持!支持支持!


    支持,欢迎投票啊。每个人可以投多票,并且可以修改投票,

    -------------------------

    回 19楼(寒喵) 的帖子
    欢迎支持投票~谢谢

    -------------------------

    劫富济贫

    -------------------------

    信章鱼 猛加分

    -------------------------

    信章鱼 猛加分

    -------------------------

    信章鱼 猛加分

    -------------------------

    信章鱼 猛加分

    -------------------------

    目前没打算

    -------------------------

    回 28楼(ap1583f2v) 的帖子
    恩,这个场景还是需求很大的

    -------------------------

    你懂的!

    -------------------------

    哈哈,后续有时间吧阿里云的服务都用上,

    -------------------------

    你是我偶像

    -------------------------

    信章鱼 猛加分

    -------------------------

    客服模式,准备有时间加一下

    2014-10-21 10:41:34
    赞同 展开评论 打赏
滑动查看更多
问答排行榜
最热
最新

相关电子书

更多
《开放搜索统一召回引擎实践》 立即下载
《开放搜索查询分析服务架构分享》 立即下载
《开放搜索在智能化行业搜索和业务增长领域的应用实践》 立即下载