閱讀363 返回首頁    go 阿裏雲 go 技術社區[雲棲]


淘點點如何輕鬆實現整套O2O類搜索解決方案?

【Open Search產品評測】淘點點(https://www.taobao.com/market/dd/index.php?spm=0.0.0.0.EkVPSP )

 

[使用背景]

我們淘點點團隊應該可以算是內網首批使用opensearch來搭建應用的團隊了,在此之前,一直使用集團內一個基於lucene的引擎平台。對於淘點點特定的排序需求,都需要該團隊配合升級,運維上共同維護。年初,集團推出Isearch5,然後又看到opensearch,一個基於Isearch5之上的搜索開放平台。聽下來最令我們開心的就是:排序支持formula, 這樣以後我們就可以自己寫排序表達式,同時也可以動態調整排序參數,排序簡簡單單的一句“sort=RANK”就能讓定製排序生效,這是方便。

1

 

[使用過程]

事實上,opensearch上手的確很快。看一下官網的幫助文檔,創建出應用,定義好索引結構,調用其提供的sdk就能快速搭建搜索服務。當然,期間也會有很多細節問題和需求,這些通過opensearch團隊的兄弟姐妹,都能快速解決。同時opensearch提供多種排序和過濾策略,完全自定義,能讓我們在產品上進行多個維度展現,底層隻需要稍微修改下查詢語句即可,非常方便。

 

[使用技巧]

如外賣場景,需要根據商家的配送範圍進行外賣能力的篩選和判斷,opensearch團隊也推出了in_polygon插件,隻需要商家將配送範圍在地圖上進行打標,轉化為opensearch的多值double字段area_values,查詢時調用in_polygon(lat,lon,area_values),其中lat\lon為當前用戶坐標,即可實現界麵上隻展現能配送到用戶指定位置的商家列表。

按距離排序或者過濾應該是O2O類搜索不可避免的需求,對此opensearch也提供了distinct的功能,能夠用到filter、sort以及排序表達式中,對距離項進行過濾、排序或者算分加權。

還有一個疑難點,按照菜品、優惠券聚合功能,比如在店的維度有多個菜品、多張優惠券,展示時需要根據若幹的條件優化到最優的一條,但又要展示出總條目,通過aggregate和distinct子句能夠很好的實現這一條,不過在數據多表join的時候邏輯和數據比較冗餘,會有些badcase出現,目前我們想辦法優化這一點。

其他還有按配送時間段自動過濾、按配送費排序等等,opensearch目前也正在支持我們做商圈的過濾,相信淘點點也會功能越來越強大。

2

 

[意見及建議]

現在用下來,覺得opensearch有幾點需要改進的:

1. 即時更新的速度:現在基本是在1分鍾內可以完成doc的更新。這對於一些實時性要求較高的場合是不友好的。這點opensearch團隊已經在推秒級的即時更新了,期望能快速用上;

Opensearch解答:秒級更新正在開發中,近期就會上線。

2. 更新的doc可以通過api推送,但是推送的doc沒有時間戳的概念,這就必須要求我們自己保證推送的doc是有序的,這樣推送doc就隻能用單台機器來做,對於qps高的場合我們很希望能用多台機器來做,因為有了時間戳,引擎底層就可以把doc按序拚好;

Opensearch解答:該功能已經在規劃中,敬請期待。

 

[總結]

總之,使用opensearch還是非常滿意的,響應速度非常好,有些細節問題都能及時解決,對於O2O類搜索場景也已經提供了一整套的解決方案。還大大節省了我們的運維成本,搞個活動神馬的QPS突增都不需要操心機器問題。至此,3月基於openseach的外賣搜索上線,此後代金券搜索,菜品搜索,吃貨相冊,公共搜索等已陸續上線。

希望 Opensearch 越做越好,給我們帶來更多的便利。

最後更新:2017-04-03 05:39:58

  上一篇:go android Fragment學習
  下一篇:go 來往——7天輕鬆定製屬於自己的搜索引擎