程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Joyo搜索框是如何完成中文自動填充的

Joyo搜索框是如何完成中文自動填充的

編輯:關於JAVA

今天跑到Joyo網去看看我需要的書到貨沒有,順便搜索了一下其他書籍,我發現有自動填充,原來沒有發現呢。汗顏。

案例:

如果我輸入de,下面會有”德語“,”德川家康“等條目出現,伴隨有多個搜索結果。

問題:

Joyo是怎麼實現的呢?

分析:

當然我不可能看到其源代碼和數據庫schema。下面按照我自己的思路來解決這個問題。

首先看看Joyo網的效果:

當你輸入"de",會出現以下結果:

我們可以看到會出現以"de"發音的漢字,當然也包括英文。

當輸入"deyu"會是什麼效果呢?看圖:

這是輸入一整個”deyu"的拼音,所以下面都是以德語開頭的,當然要是下面有“德育”的,也會顯示的。

看看輸入"de yu"會是什麼效果?我猜是沒有結果。事實上也是:

這說明是中間不能有空格的,除非“德語”是“德 語”,下面才有結果。

從上面你能得出什麼結論?

我的結論是:

拼音是按照漢語的順序來的,如果有空格,那麼拼音的相應位置也有空格。例如"德語"對應是"deyu","德 語"則是"de yu"。

字母區分大小寫的。

既然有上面的結論,那麼怎麼去做呢?對於程序不大的,很簡單,直接在數據庫裡設置。

假設數據庫裡有一個表名叫item_t.之所以選擇item,那是因為Joyo買書,賣CD等各種商品,所以不能以book_t來代替。

item_t應該有如下字段:

id  每本書的id

price 每本書的價格

name 每本書的名字,是中文就是中文,是英文就是英文

name_alias 用來存儲上面的拼音的。

這裡特別要介紹一下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的使用方法,有人可能會提到沒法輸出中文,這些都是基本知識啦,這裡不詳述。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved