【Open Search產品評測】--php
淘點點:基於OpenSearch,輕鬆實現一整套O2O類搜索解決方案html
[使用背景]api
咱們淘點點團隊應該能夠算是內網首批使用opensearch來搭建應用的團隊了,在此以前,一直使用集團內一個基於lucene的引擎平臺。對於淘點點特定的排序需求,都須要該團隊配合升級,運維上共同維護。年初,集團推出Isearch5,而後又看到opensearch,一個基於Isearch5之上的搜索開放平臺。聽下來最令咱們開心的就是:排序支持formula, 這樣之後咱們就能夠本身寫排序表達式,同時也能夠動態調整排序參數,排序簡簡單單的一句「sort=RANK」就能讓定製排序生效,就是方便。運維
[使用過程]優化
事實上,opensearch上手的確很快。看一下官網的幫助文檔,建立出應用,定義好索引結構,調用其提供的sdk就能快速搭建搜索服務。固然,期間也會有不少細節問題和需求,這些經過opensearch團隊的兄弟姐妹,都能快速解決。同時opensearch提供多種排序和過濾策略,徹底自定義,能讓咱們在產品上進行多個維度上展示,底層只須要稍微修改下查詢語句便可,很是方便。spa
[使用技巧]插件
如外賣場景,須要根據商家的配送範圍進行外賣能力的篩選和判斷,opensearch團隊也推出了in_polygon插件,只須要商家將配送範圍在地圖上進行打標,轉化爲opensearch的多值double字段area_values,查詢時調用in_polygon(lat,lon,area_values),其中lat\lon爲當前用戶座標,便可實現界面上只展示能配送到用戶指定位置的商家列表。orm
按距離排序或者過濾應該是O2O類搜索不可避免的需求,對此opensearch也提供了distinct的功能,可以用到filter、sort以及排序表達式中,對距離項進行過濾、排序或者算分加權。htm
還有一個疑難點,按照菜品、優惠券聚合功能,好比在店的維度有多個菜品、多張優惠券,展現時須要根據若干的條件優化到最優的一條,但又要展現出總條目,經過aggregate和distinct子句可以很好的實現這一條,不過在數據多表join的時候邏輯和數據比較冗餘,會有些badcase出現,目前咱們想辦法優化這一點。排序
其餘還有按配送時間段自動過濾、按配送費排序等等,opensearch目前也正在支持咱們作商圈的過濾,相信淘點點也會功能愈來愈強大。
[意見及建議]
如今用下來,以爲opensearch有幾點須要改進的:
1. 即時更新的速度:如今基本是在1分鐘內能夠完成doc的更新。這對於一些實時性要求較高的場合是不友好的。這點opensearch團隊已經在推秒級的即時更新了,指望能快速用上;
Opensearch解答:秒級更新正在開發中,近期就會上線。
2. 更新的doc能夠經過api推送,可是推送的doc沒有時間戳的概念,這就必需要求咱們本身保證推送的doc是有序的,這樣推送doc就只能用單臺機器來作,對於qps高的場合咱們很但願能用多臺機器來作,由於有了時間戳,引擎底層就能夠把doc按序拼好;
Opensearch解答:該功能已經在規劃中,敬請期待。
[總結]
總之,使用opensearch仍是很是滿意的,響應速度很是好,有些細節問題都能及時解決,對於O2O類搜索場景也已經提供了一整套的解決方案。還大大節省了咱們的運維成本,搞個活動神馬的QPS突增都不須要操心機器問題。至此,3月基於openseach的外賣搜索上線,此後代金券搜索,菜品搜索,吃貨相冊,公共搜索等已陸續上線。
但願 Opensearch 越作越好,給咱們帶來更多的便利。