【阿里雲產品公測】開放搜索服務 opensearch java jdk 應用體驗之 機器人聊天

做者:阿里雲用戶啊裏新人php

 

需求:基本實現智能聊天! html

 

最近在開發一款機器人,但願實現基本的聊天功能,詞庫是有的,可是若是是作徹底匹配這個出來的效果很悲催, java

  

好比詞庫:你好,回答是:哈哈,很好啊.    算法

若是問:你好?,這時候詞庫沒有就沒法回答。 json

 

一直在考慮怎麼實現,當看到阿里的opensearch以後就感受:這個就是我想要的  api

以前沒有研究過,只聽過搜索引擎,因此我是這塊的小白。感受很高大上,什麼分詞啊,匹配啊。。。專業名詞我就不用了由於我不專業哈哈 數據結構

 

按照慣例依然附上一張 實現效果圖:app

 

 

準備工做 測試

1   既然是公測天然的要申請公測資格這個就很少說了。如今申請仍是比較容易的。 ui

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.     
  5.     CloudsearchDoc cd=new CloudsearchDoc("test",cc);//這裏兩個參數一個是應用名,一個是客戶端
  6.     Map fields=new HashMap<String, Object>();
  7.     fields.put("id", "1");
  8.     fields.put("wen", "你好麼");
  9.     fields.put("da", "哈哈,很好");
  10.     //以上是按照本身的數據結構添加
  11.     
  12.     
  13.     cd.add(fields);//添加一條數據
  14.     
  15.     //這裏須要說的是,能夠添加多條,而後一塊兒提交
  16.     
  17.     cd.push("main");//發送數據

上傳文檔其實很簡單,我使用了最簡單的實現。 

 

  我上傳了詞庫8000多條。 

 

搜索 

而後就是搜索的實現了 

 

  1. //看到實例化的方法有好幾個,可是別的不知道怎麼實現
  2.     //這裏實例化的時候我使用的是這個方法,由於的是阿里雲的帳號,從控制檯獲取 key secret就能夠了。剩下兩個一個我填空,一個是固定值
  3.     CloudsearchClient cc = new CloudsearchClient(key, secret, null, KeyTypeEnum.ALIYUN);
  4.     
  5.     String resultJson = "";
  6.     String resultDa = "";
  7.     try {
  8.         CloudsearchSearch search = new CloudsearchSearch(cc);
  9.         List<String> indexList = new ArrayList<String>();
  10.         indexList.add("duihua");// 這裏是簡歷應用的名字
  11.         search.addIndex(indexList);//將應用索引加入,這裏是能夠加入多個的
  12.         search.setQueryString("default:'你吃飯了麼?'");//搜索制定的次
  13.         search.setFormat("json");//返回格式,我仍是比較喜歡json
  14.         resultJson = search.search();
  15.     } catch (MalformedURLException e1) {
  16.         e1.printStackTrace();
  17.     } catch (IOException e1) {
  18.         e1.printStackTrace();
  19.     }
  20.     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/

 

相關文章
相關標籤/搜索