Joyo搜索框是如何完成中文自动填充的?
今天跑到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