作者:阿里云用户啊里新人

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

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

 

比如词库:你好,回答是:哈哈,很好啊.

如果问:你好?,这时候词库没有就无法回答。

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

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

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

 

 

准备工作

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

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

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

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

开始体验

既然是要应用到我的应用,当然要在本地测试一下,

opensearch是对外网的,所以来说不止针对阿里云的用户可以使用,只要你有搜索的需求都可以使用

首先当然是新建一个项目,当然你也可以直接在你的项目中直接测试。

然后将sdk导入项目。

(以上感觉都是都废话哈啊哈)

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

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

其中包括几个主要操作,

创建应用,设置应用

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

上传数据,更新数据

应用创建完毕肯定要上传数据的,这里阿里提供了一个很好的地方就是根据你设置的数据可是生成几个模板,你可以下载,然后看一下应该组装为什么样子的。

我的数据格式很简单

搜索体验,简单就好!

只有一张主表,三个字段,id主键,wen:问话,用来搜索。 da:回答,用来回答的内容,不会建立索引。

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

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

我上传了词库8000多条。

搜索

然后就是搜索的实现了

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

只有以上这几行就实现了搜索功能功能。

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

体验总结

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

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

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

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

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

免费的分词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支持复杂的算法,实现你不同的排序需求,

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

建议&意见

1,关于非全部匹配的召回,希望可以尽快上线。

---已经排期,预计12月左右上线。

2,是否可以开放分词接口,

---以后会考虑把分词结果返回给用户,这样应该可以实现你的功能吧。

3,排序算法上是否可以有更多的文档给予一定的讲解,很多人这方面还是比较弱的

---目前的文档已经有详细的说明和各个feature的用户及适用场景,我理解你说的应该是怎么跟实际场景做对应吧,这部分我们会加强,你可以看下导入模板中是如何设计的,应该能明白。

原文地址:http://bbs.aliyun.com/read/179921.html

参加活动:http://promotion.aliyun.com/act/aliyun/freebeta/

【阿里云产品公测】开放搜索服务 opensearch java jdk 应用体验之 机器人聊天的更多相关文章

  1. 【阿里云产品公测】在ACE上部署WP测试体验

      ACE服务其实已经有很多类似的服务提供商了,无论收费的还是免费的,  但是到现在为止还没有体验过,正好借着这次机会,来体验一下阿里云的ACE服务. ' !2NSv   /IQ$[WR cx   B ...

  2. 【阿里云产品公测】高大上的搜索服务OpenSearch,你值得拥有!

    [阿里云产品公测]高大上的搜索服务OpenSearch,你值得拥有! 作者:阿里云用户trcher ​ 一.前言: 在OpenSearch没出来之前,就一直想给网站做个搜索功能,虽然网站本身自带搜索功 ...

  3. 【阿里云产品公测】大数据下精确快速搜索OpenSearch

    [阿里云产品公测]大数据下精确快速搜索OpenSearch 作者:阿里云用户小柒2012 相信做过一两个项目的人都会遇到上级要求做一个类似百度或者谷歌的站内搜索功能.传统的sql查询只能使用like ...

  4. 【阿里云产品公测】简单日志服务SLS使用评测 + 教程

    [阿里云产品公测]简单日志服务SLS使用评测 + 教程 评测介绍 被测产品: 简单日志服务SLS 评测环境: 阿里云基础ECS x2(1核, 512M, 1M) 操作系统: CentOS 6.5 x6 ...

  5. 【阿里云产品公测】以开发者角度看ACE服务『ACE应用构建指南』

    作者:阿里云用户mr_wid ,z)NKt#   @I6A9do   如果感觉该评测对您有所帮助, 欢迎投票给本文: UO<claV   RsfTUb)<   投票标题:  28.[阿里云 ...

  6. 【阿里云产品公测】PTS压力测试WP站搜索

    [阿里云产品公测]PTS压力测试WP站搜索 作者:阿里云用户cnsjw PTS性能测试服务是一个非常非常强大的压力测试工具.可以模拟百人同时访问网站的情况,并监测ECS和RDS的各项指标,生成非常详细 ...

  7. 【阿里云产品公测】消息队列服务MQS java SDK 机器人应用初体验

    [阿里云产品公测]消息队列服务MQS java SDK 机器人应用初体验 作者:阿里云用户啊里新人   初体验 之 测评环境 由于MQS支持外网访问,因此我在本地做了一些简单测试(可能有些业余),之后 ...

  8. 【阿里云产品公测】利用PTS服务优化网站数据库读写性能

    [阿里云产品公测]利用PTS服务优化网站数据库读写性能 作者:阿里云用户千鸟 写这个帖子主要也是因为在用PTS测试网站的时候,手动访问网站进入报错页面,主要原因是数据库连接对象存在问题,导致并发多的时 ...

  9. 【阿里云产品公测】结构化数据服务OTS之JavaSDK初体验

    [阿里云产品公测]结构化数据服务OTS之JavaSDK初体验 作者:阿里云用户蓝色之鹰 一.OTS简单介绍 OTS 是构建在阿里云飞天分布式系统之上的NoSQL数据库服务,提供海量结构化数据的存储和实 ...

随机推荐

  1. python windows安装

    一.下载并安装 下载地址http://www.python.org/download/ 安装 二.配置环境变量 配置python环境变量以便后面安装插件.D:\Program Files\Python ...

  2. maven项目,导入的jar包,没有包含在pom文件中,install失败

    [INFO] BUILD FAILURE[INFO] ------------------------------------------------------------------------[ ...

  3. Oracle 10g设置IP访问限制

    出于数据安全考虑,对Oracle数据库的IP做一些限制,只有固定的IP才能访问. 修改 db_1/NETWORK/ADMIN/sqlnet.ora文件 增加以下内容(红色表示注释): #开启ip限制功 ...

  4. How to Avoid Producing Legacy Code at the Speed of Typing

    英语不好翻译很烂.英语好的去看原文. About the Author I am a software architect/developer/programmer.I have a rather p ...

  5. 「C」 数组、字符串、指针

    一.数组 (一)数组 概念:用来存储一组数据的构造数据类型 特点:只能存放一种类型的数据,如全部是int型或者全部是char型,数组里的数据成为元素. (二)数组的定义 格式: 类型 数组名[元素个数 ...

  6. cmd 进入mysql

    从cmd中进入MySQL的命令界面 1.开始中找出运行:输入cmd2.查找appserv所在盘,我的在D盘,所以接着输入:d:3.在d盘中查找mysql所在目录:cd appserv\mysql\bi ...

  7. Java中多线程同步类 CountDownLatch

    在多线程开发中,常常遇到希望一组线程完成之后在执行之后的操作,java提供了一个多线程同步辅助类,可以完成此类需求: 类中常见的方法: 其中构造方法:CountDownLatch(int count) ...

  8. [转]关于python中带下划线的变量和函数的意义

    Python 的代码风格由 PEP 8 描述.这个文档描述了 Python 编程风格的方方面面.在遵守这个文档的条件下,不同程序员编写的 Python 代码可以保持最大程度的相似风格.这样就易于阅读, ...

  9. kubernetes promethues预警、报警

    k8s addon中prometheus为测试事例,官方推荐生产环境使用Prometheus Operator and kube-prometheus. 1.clone 源码 git clone ht ...

  10. Android中的padding和margin的区别

    在Android的布局中,常常有人将padding和margin搞混,他们其实不一样的,padding是该控件的内部距离. magin是该控件与其他控件之间的距离.例如 <LinearLayou ...