今天跑到joyo網去看看我需要的書到貨沒有,順便搜尋了一下其他書籍,我發現有自動填充,原來沒有發現呢。汗顏。
案例:
如果我輸入de,下面會有」德語「,」德川家康「等條目出現,伴隨有多個搜尋結果。
問題:
joyo是怎麼實現的呢?
分析:
當然我不可能看到其源**和資料庫schema。下面按照我自己的思路來解決這個問題。
首先看看joyo網的效果:
我們可以看到會出現以"de"發音的漢字,當然也包括英文。
這是輸入一整個」deyu"的拼音,所以下面都是以德語開頭的,當然要是下面有「德育」的,也會顯示的。
這說明是中間不能有空格的,除非「德語」是「德 語」,下面才有結果。
從上面你能得出什麼結論?
我的結論是:
既然有上面的結論,那麼怎麼去做呢?對於程式不大的,很簡單,直接在資料庫裡設定。
假設資料庫裡有乙個表名叫item_t.之所以選擇item,那是因為joyo買書,賣cd等各種商品,所以不能以book_t來代替。
item_t應該有如下字段:
這裡特別要介紹一下name_alias,這個field是關鍵。在錄入的時候應該儲存相應的拼音。按照一般習慣,英文書名應該儲存英文。漢字的儲存拼音。
實現
既然有了上面的分析,還有什麼不能解決的呢。很明顯要用到ajax技術。為了查詢精確,應該到name,name_alias來2個field都查詢。寫一條sql:
select id,name from item_t where name like "%keyword_you_search% or name_alias like '%keyword_you_search%'
你也許會問,這裡輸出的是整個書名啊,和輸出結果有出入。的確如此。
那麼joyo到底是怎麼做的?我猜想她將每個使用者輸入的關鍵字都儲存起來的。這樣在查詢就方便一些。但是最終也不會離不開第一步。
引申
有人也許會問,你說的也太簡單了吧,那麼google中國會怎麼處理呢?我也不知道。
單從google首頁來看,其實和joyo差不多。但是有個問題是google應該不太會用sql server或oracle等資料庫的做法去儲存,因為這非常不利於查詢等操作。
所以上面的name_alias可能行不通,不然每次都需要人工去輸入,這得多大的功夫。唯一可能的就是自動去處理。
如何處理呢?最差的一種就是將每個漢字的拼音都拿出來。相信這也不是什麼難事,不然google的輸入法是怎麼做出來的呢。
接下來的事情怎麼做,我想大家都知道。
更多
這裡不介紹ajax的使用方法,有人可能會提到沒法輸出中文,這些都是基本知識啦,這裡不詳述。
反饋
如何高效的完成中文分詞?
在說分詞之前,筆者先來介紹下何為分詞 分詞就是將連續的字序列按照一定的規範重新組合成詞序列的過程。英文中,單詞之間是以空格作為自然分界符的,但是中文的分詞就複雜多了,要涉及一些演算法,對於初學者來說,還是有很多難度的。這裡筆者只介紹一種最簡單的方式,有興趣的朋友可以看下,直接上 python實現方式...
Lan內部是如何完成通訊的
乙太網是資料鏈路層的一種通用協議,乙太網包的標頭里包含傳送方和接受方的mac位址。資料報裡存放ip 網路層 的東西。網路層的標頭里存放傳送方和接受方的ip位址,資料長度,資料報裡存放tcp udp 傳輸層 的東西 udp的表頭里存放傳送方和接受方的埠,tcp的話除此之外還會放置保證傳輸的各種屬性。傳...
xmlhttp是如何完成非同步操作的
ajax第乙個字母就是asynchronous 非同步,那麼到底xmlhttp為何能支援非同步操作呢?大家在使用ajaxpro的時候,經常這麼呼叫伺服器端方法 function dosomething function callback res 這樣在呼叫dosomething方法的時候,會很快返回...