快速业务通道

Joyo搜索框是如何完成中文自动填充的 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19

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

时间:2011-02-13

今天跑到Joyo网去看看我需要的书到货没有,顺便搜索了一下其他书籍,我发现有自动填充,原来没有发现呢。汗颜。

案例:

如果我输入de,下面会有”德语“,”德川家康“等条目出现,伴随有多个搜索结果。

问题:

Joyo是怎么实现的呢?

分析:

当然我不可能看到其源代码和数据库schema。下面按照我自己的思路来解决这个问题。

首先看看Joyo网的效果:

当你输入"de",会出现以下结果:

Joyo搜索框是如何完成中文自动填充的 - 编程入门网

我们可以看到会出现以"de"发音的汉字,当然也包括英文。

当输入"deyu"会是什么效果呢?看图:

Joyo搜索框是如何完成中文自动填充的 - 编程入门网

Joyo搜索框是如何完成中文自动填充的(2)

时间:2011-02-13

这是输入一整个”deyu"的拼音,所以下面都是以德语开头的,当然要是下面有“德育”的,也会显示的。

看看输入"de yu"会是什么效果?我猜是没有结果。事实上也是:

Joyo搜索框是如何完成中文自动填充的 - 编程入门网

这说明是中间不能有空格的,除非“德语”是“德 语”,下面才有结果。

从上面你能得出什么结论?

我的结论是:

拼音是按照汉语的顺序来的,如果有空格,那么拼音的相应位置也有空格。例如"德语"对应是"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的使用方法,有人可能会提到没法输出中文,这些都是基本知识啦,这里不详述。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号