【搜索Case分享】五分鐘,教你優化知乎搜索

0. 前言

單純地講理論都是耍流氓。今天拿知乎搜索作為例子,擼起袖子來講一下怎麼做搜索吧。本篇文章提到的理論知識,在此專欄前兩篇文章中都有比較系統的總結。本文不做過多的理論解釋。

本次case使用版本為知乎iOS客戶端3.24.2,手機型號iPhone 6S,系統版本9.35。

主要原則:

  • 不糾結現有設計有利有弊的地方

  • 對於所有問題給出判定依據

  • 對於所有問題給出解決方案

當然,這也應該是產品經理面對任何一款產品應該有的態度。

1. 歷史搜索

1.1 問題說明:

搜索入口頁面有歷史記錄,這個是應該有的設計,這個也是搜索的一大標準功能,但是實現上有三個問題:

  • 問題1 :一行一個的設計嚴重浪費空間,尤其在調用鍵盤的時候只能看見六條內容

  • 問題2:如果用戶搜索記錄超過十條,清空歷史按鈕將無法露出

  • 問題3:歷史記錄不區分搜人還是搜內容(例如「酸牛奶」是搜用戶的歷史記錄,這裡點擊會出現搜索「酸牛奶」內容的結果,並非用戶之前的選擇)

1.2 問題方案

對於前兩個問題,已經有比較好的解決方案了,直接貼學霸作業你們抄就好了嘛。學霸作業得到點名表揚的原因如下:

  • 標籤化展示歷史記錄展示節省空間

  • 全部清空歷史按鈕入口明顯且可用

  • 長按標籤出刪除按鈕,既滿足了高端用戶的低頻需求,對普通用戶摺疊也做到了界面簡潔,同時也符合iOS的交互(和刪除應用交互相同)

至於第三個問題,其實區分開搜人或者搜用戶的歷史記錄就好了。順手做了一個調整:切換到用戶tab默認文案為「搜索用戶」,切換到內容tab,默認文案為「搜索問答、文章、話題」。如下圖:

2. 自動補全和搜索記錄

2.1 問題描述

目前知乎搜索採用了及時輸入及時響應的方案,畢竟有搜狗的技術支持。但是,這其實並不是適合移動端的交互方式。因為屏幕限制,無法達到自動補全和搜索記錄的及時展示,不利於引導用戶搜索和減少用戶搜索錯誤率。搜狗和知乎搜索對比如下,一眼就能看出,學霸搜狗幫知乎寫作業了,但是知乎還是有科作業忘交了。

2.2 解決方案:

知乎應該加上自動補全和歷史搜索的展示,如下圖左邊圖標做了區分,時鐘代表歷史輸入記錄的聯想,其他的代表系統的自動補全。

3.內容搜索review

搜索內容的部分因為搜狗的技術支持,是挑不出來什麼太大的毛病的。尤其是我並不知道知乎搜索內容引導策略,只能從功能完備性出發。自動糾錯,高亮顯示,命中詞定製,知乎都做了相應的功能。如下圖所示:「產品經李」自動糾錯為「產品經理」,命中話題「產品經理」頂部展示話題,內容中也有高亮顯示。

但是,在技術複雜度更高的搜索內容上做的越來越好的同時,知乎搜索用戶的功能做得還是很崩壞。前兩個改進主要是交互和功能的改進,接下來主要說一下如何設計搜索的邏輯。

4. 搜索用戶問題說明

請大家看幾個Bad Case。@酸牛奶大念念是和我互關的普通用戶,但是有比較高頻的互動,@韋思嘉 是和我互關的一個大V,@伍聲 是我關注了遊戲解說,全網有人氣和粉絲,@張佳瑋是我沒有關注的大V。那麼看case吧。

case1:搜索 「酸牛奶」:首屏有大量的酸牛奶昵稱用戶,而且「帶牙套的喬瀟」這個真的沒看懂為什麼,估計是bug。

case2:搜索「思嘉」:在大約上百個思嘉之後終於出現的非精確匹配的用戶,但是瀏覽完發現沒有韋思嘉。

case3:搜索「佳瑋」:在大量的佳瑋,全部瀏覽完,沒有出現張佳瑋的結果。

case4:搜索「伍聲2009」(伍聲優酷用戶名):結果在第一屏底部。同時可以對比下微博的搜索結果。

case 5:搜索「產品經理」,發現有姓名中有不含產品經理的用戶,但是這些用戶簽名中有產品經理。

針對以上case可以發現一些規律:

  • 1. 知乎搜索應該是沒有做分詞功能(這在搜人功能中是完全正確的)
  • 2. 精確命中的情況下給了很高的權重。精確命中用戶名的用戶一定會在上面,即使大V名字部分命中搜索詞,也一定再下面,甚至搜不到。
  • 3. 搜索文本數據包含簽名信息。
  • 4. 對於用戶之間的互關和互動沒有給予足夠的重視。

同時我們也發現一個知乎現狀:

  • 由於沒有不許重名的限制,存在大量潛水重名用戶。

5. 搜索用戶解決方案

5.1 需求分析

在考慮怎麼解決上述問題之前,首先需要回歸搜索的本質:搜索的需求是什麼?對於知乎而言,搜索用戶的需求是什麼?

在缺乏數據的情況下,通過簡單的思辨給出一些我的思考(其實很多成熟的功能需求判斷是不需要數據也能得到的):

  • 需求1. 搜索知乎的KOL或者說大V,進一步瀏覽和關注。
  • 需求2. 想看看自己之前關注的人或者互關的人最近發了什麼內容。
  • 需求3. 得知認識的人在知乎,搜索這個人進行關注。

5.2 bad case和需求1,2的解決

問題1需要給大V足夠的排序權重,問題2需要給關注關係一定的權重,問題3需要能精確搜索到用戶的唯一標識。

先說問題1和2,首先知乎給精確命中的潛水用戶很大的權重是否應該呢?用戶是否有動機去搜一個自己不認識的潛水用戶呢?答案當然是不應該和沒有動機。

所以直接給一個初步的公式,然後具體參數可以隨後迭代吧。score=frac{alpha cdot name+eta sign+gamma log(fans)+delta  log(like)}{sqrt{ alpha ^2+eta ^2+gamma ^2+delta ^2} } +epsilon follow

alpha 為姓名文本相關度的權重,name為文本相關度的得分

eta為簽名文本相關度的權重,sign為文本相關度的得分

gamma 為粉絲數的權重,log(fans)為粉絲數的以10為底的對數

delta 為獲得贊數的權重,log(like)為獲得贊數的以10為底的對數

sqrt{ alpha ^2+eta ^2+gamma ^2+delta ^2} 為權重的歸一化係數,保證得分在一個合理範圍內

epsilon 為關注關係的權重。follow為關注關係的取值,互關為2,單項關注(搜索用戶關注了被搜索用戶)權重為1,沒有關係權重為0

因為沒有計算器,為了好算,假設五個權重取值為10,4,2,1,1,假設簽名全部不命中不得分。則公式簡化為:

score=frac{ 10name+2 log(fans)+log(like)}{11} +follow

姓名得分方便起見,假設精確命中得分為2,非精確命中得分為1(實際的計算比較複雜):

非精確命中,1萬粉絲,1萬贊,無關注關係用戶得分:2

非精確命中,0粉絲,0贊,互相關注用戶得分為:2.9

非精確命中,0粉絲,0贊,單項關注用戶得分為:1.9

精確命中,0粉絲,0贊,無關注關係用戶得分為:1.8

這種情況下,4中提到的所有bad case全部解決。5中提到的需求1和需求2也都完全滿足了。

5.3 已經解決的需求3

唯一缺乏的就是還有一個需求:得知認識的人在知乎,搜索這個人進行關注。因為之前沒有關注關係,這些人如果沒有粉絲,即使精確命中會被排在最下面。

其實這個問題的根本原因是知乎的重名問題,微信和微博因為每個人都是唯一ID(微博名和微信號),所以肯定可以快速搜索到。說到這裡可能有人已經想到了,各位都有個個人域名,就是各位的知乎ID。比如我就是pan-yiming-61。其實知乎已經做到了,只是沒有引導大家使用而已。現在是可以直接搜索知乎ID,並排在結果第一位。

需求3其實就是需要大家都知道自己這個ID是可以搜索的,今後讓別人關注自己的知乎,直接讓TA去搜ID就好了(就像搜索微信號那樣)。

這個故事也告訴我們,功能做好知識第一步,一到大家使用才是真正的完成需求。

6.總結

每天下班到家10點左右,鍛煉洗漱完11點左右。每天晚上寫大概2~3個小時,在快一周的時間,終於把搜索相關內容全部寫完了。第一篇的搜索原理,第二篇的功能盤點,第三篇的實例分析。希望看完的朋友,對於產品中看似最複雜的搜索,有一個比較完整的了解。

同時@知乎小管家 這些意見都可以反饋給知乎搜索產品經理,應該多少有一些用吧。

下周開始要完善下個版本PRD和準備上個版本數據分析了,估計更新頻率會有所降低,但還是會持續更新。如果對這些內容還比較感興趣,歡迎持續關注專欄^_^

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

下期預告:【feed流設計】怎樣用策略掌控用戶視線


推薦閱讀:

查詢詞-站點相關性計算
互聯網搜索入門
記一次ElasticSearch集群災難恢復
這不是文本框,是搜索框
玩轉知乎,我只看這一篇。

TAG:搜索 | 产品经理 | 产品策略 |