為什麼在知乎上搜索「map[]」一定會導致「伺服器提了一個問題」?

事實上不僅僅是「map[]」,大多數帶有「[]」後綴的查詢都會導致「伺服器提了一個問題」,比如「abc[]」。但有意思的是「a[]」和「[]」本身不會。同樣的問題還可以在包含「{}」的查詢上看到。我想了幾分鐘,沒想到一個合理的解釋,方便的話,請知乎員工來滿足一下我的好奇心,XD

順便,這個 bug 我已經報告有一陣了,還沒修好么?


直接看最後一句

"error": { "msg": "org.apache.solr.search.SyntaxError: Cannot parse "map[]": Encountered " "]" "] "" at line 1, column 4.
Was expecting one of:
& ...
& ...
", "code": 400 }

由於使用了solr默認標準的查詢解析器,特殊字元就沒法處理,用」map[]"去搜就不會有問題,或者更改查詢器,比如用edismax 。

以上假設都是基於知乎使用solr作為檢索引擎。不過這個職位可以說明些什麼搜索研發工程師 - 知乎招聘


知乎搜索工程師一直在刷這個帖子等正確答案好回去修 bug 。


X[]、X()、X{} 都會造成伺服器提出問題。X為任意字元。

是轉義的問題?


-
知乎的新版搜索已經解決這個問題了。

-


1.各位不要猜了,這裡給出正確答案:【轉義問題】。

2.知乎的工程師,只對部分關鍵字做了處理,還有些忘了處理。

以下這些字元知乎的工程師忘了處理,直接輸入會導致錯誤:
! ( ) [ ] { }
比如輸入:【aa()】會導致錯誤。

所以,只要在上述符號之前,自己把它注釋掉,就沒問題了。
比如輸入:【aa()】就不會導致錯誤。


估計是類似SQL注入神馬的bug吧
俺不懂SQL,不要追問俺


咳咳, 直接上圖:

咳咳, 為嘛, 我這可以搜索了的了?我這搜索的是回答, 同理回答, 成員, 話題均能正常搜索.

  • 根據推斷, 知乎至少有兩台伺服器提供搜索功能, 對問題和(回答, 成員, 話題)進行分開搜索, 並且這兩類的查詢分詞器是不同的啊, 根據猜測知乎應該有8種分詞器(一不小心似乎發現了個攻擊手段, 提了烏雲), 。
  • 被頂的最高的回答說知乎使用solr查詢器, 用double colon即可避免, 但是.....

http://www.zhihu.com/search?q=%E2%80%9Daaaaaa%5B%5D%E2%80%9Ctype=question, 伺服器還會提問題好不好, 說明知乎肯定是自己寫的分詞器, bug太多. 還有說反轉義的,唔,你搜索f?能正常搜索, 你加個f?搜一下了, 又掛了好不好, 這到底發什麼神馬? 還不是自己寫的分詞器有問題.
總結:

  • 不同類型的搜索分詞器到底哪裡不同?
  • 在搜索問題的時候, 知乎你是不是還做了什麼操作(autocomplete為嘛被我弄掛了, 別打我)?

猜測:

  • 知乎正在測試新的搜索功能, 在等大家給他找bug.

工程師的小彩蛋 看哪些人閑著沒事幹


突然想到天津政府網


還要不要過國慶了?! @李奇


[]{}:這些是搜索引擎的查詢語法,估計後台沒對搜索內容中的這些字元進行轉義,目測是用solr做的搜索服務介面


大家別頂了,讓辛勤的工程師好好過個周末吧。


這個問題是知乎工程師提的么…… 感覺就是的樣子。


可能是當成json解析了


推薦閱讀:

Quora 沒有,而你卻想知乎要追加的功能/特性是什麼?
你是否希望關閉知乎日報的評論功能?你希望評論變成什麼樣子?
知乎從無到有的過程中走過什麼彎路嗎?
為什麼註冊 Quora 不需要邀請碼,而註冊知乎則需要呢?
知乎允許匿名回答問題,是為了保護那些實名的人,方便他們說些不和諧的話嘛?還是有其他意義,比如為了防止有了爭議後,指名道姓的罵?

TAG:知乎 | Python | Bug | 知乎Bug反饋 |