存档: May, 2008
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 LIKE “%keyword_you_search% OR name_alias LIKE ‘%keyword_you_search%’
你也许会问,这里输出的是整个书名啊,和输出结果有出入。的确如此。
那么Joyo到底是怎么做的?我猜想她将每个用户输入的关键字都存储起来的。这样在查询就方便一些。但是最终也不会离不开第一步。
引申
有人也许会问,你说的也太简单了吧,那么Google中国会怎么处理呢?我也不知道。
单从Google首页来看,其实和joyo差不多。但是有个问题是Google应该不太会用SQL Server或Oracle等数据库的做法去存储,因为这非常不利于查询等操作。
所以上面的name_alias可能行不通,不然每次都需要人工去输入,这得多大的功夫。唯一可能的就是自动去处理。
如何处理呢?最差的一种就是将每个汉字的拼音都拿出来。相信这也不是什么难事,不然Google的输入法是怎么做出来的呢。
接下来的事情怎么做,我想大家都知道。
更多
这里不介绍Ajax的使用方法,有人可能会提到没法输出中文,这些都是基本知识啦,这里不详述。
最后欢迎大家拍砖。
Confach发表于 May 30, 2008 4:37 pm | 留言 |一技之长
生活之美之一:态度
这些天,一直词在我脑海里打转转,这就是生活的态度。
也不知道从什么时候开始自己有了生活的态度。在我记忆中,形成一种强烈的态度是在大三。当时马克思等哲学原理都学完了,更深刻的理解了什么是世界观和人生观。这时我对生活的态度才有了一个定性的认识。
我们都知道生活的态度不可能在大学几年就能形成的,它和自己以前的学习环境,生活环境,以及家庭背景等多重复杂的内外因素有关。大二到大三那个暑假对于我来说是一个不平凡的一段时间。这一年我懂得了朋友之间的友情珍贵,也懂了生活应该保持乐观向上。也正因为如此,让我度过了大部分人都认为极其无趣的时光。
多年来我一直以这种信念支撑着自己。2004年至2005年这段时间,和一个女孩子开始熟悉起来,事实上我很早就认识她,只不过那时候不是太熟悉而已。她给我的感觉她自己心里有个极其强烈的信念。甚至有时候这个信念令他最亲近的人有时候不知所措。也许我是受她的感染,整个人都变得和他一样。有一次她对我说,要不是你心里一直个信念,我相信你已经倒了。当时我听见这句话说时,我也感到很诧异。当时因为工作的关系,我变得特别忙,但是对生活,对工作都是一种积极的态度。自从那个时候,我开始晚上跑步,每天大约1个小时。
每个人对生活的态度都不一样,这也直接决定了世界观和价值观。这样每个人选择的生活方式都不一样了。有人认为对现在的生活知足了,所以开始怠慢自己,觉得再也没有生活的目标。有人认为这样的生活并不好,于是努力奋斗,争取过的更好一些。还有人其实对现在生活挺满足的,但是总认为自己不应该平平淡淡的生活着,而是应该过一种有激情,有意义的生活。
对于第一种,我个人认为不是我喜欢的那种。至于后面2种,我觉得还是不错的。当然,我的这种选择已经侧面反映了我自己的选择。
很多人根本不知道自己应该干什么,这是可悲的。
前些天,也认识一个女孩子,她给我引用了许三多的一句话:好好活就是干有意义的事,有意义的事就是好好活。这也充分体现她的一种态度。
有朋友一直抱怨现在太无聊了,想找回自己原来的那些激情,其实这种状态目前我也有。最后我们讨论得出一个结论:如果本质上是一个有积极的人,那么暂时的失去并不可怕,如果换个环境还会找回来的。
态度,决定了去做什么事情。
Confach发表于 May 29, 2008 5:50 pm | 留言 |闲情逸致
InstallShield安装时出现“1152:error extracting"的解决方案
InstallShield制作的安装文件可能会出现”1152:error extracting”错误。那么应该怎么解决呢?
如果安装的是英文操作系统,这个问题一般不太会出现,但是是中文系统或者韩文操作系统,这个问题就很有可能出现,不管是XP,2K,还是server。
到底为什么会出现这种错误呢?
答案是安装时可能会涉及到一些特殊的字符(例如版权符号等),而这些字符在中文系统下不一定会识别。当然可能会有其他原因。
至于最常见的原因可以参看Installshield的官方解决方案,Q107317: ERRDOC: Setup.exe Error 1152
无非就是重新下载,temp的权限修改。
下面介绍的是我自己的安装经历:
我的机器是Windows server 2003,中文版的。安装时出现上述错误。不得已,跑到英文版上的去安装,成功了。于是我检查了一下windows installer的版本,是最新版本的,然后再检查temp的权限,改成writable,但是还是不行。
一不小心发现安装的界面上有几个乱码,于是想是不是这个方面的原因呢?突然想起3年前编译个项目因为里面有些法文字符,改一下区域和语言设置解决了问题。于是跑到控制面板里将里面的所有设置都修改英文的。重启机器。然后安装,搞定。但是同时我发现我机器上很多原来显示正常的中文现在不正常了,于是又改了回来。
想想真是够麻烦的。
Confach发表于 May 29, 2008 12:55 pm | 留言(1) |一技之长
最新留言
- odie:pdf
- 360662736:个人感觉用带目录的WORD比较好
- wanghui:确实是这样,受一位同学影响,我喜欢上了看南风窗,希望通过它来让我这样
- DDD:有的看就成,什么格式都可以 的
- Confach:我自己先说:PDF