首页 新闻 会员 周边 捐助

电子商务网站搜索是怎么实现的,表是怎么设计的

1
悬赏园豆:30 [已解决问题] 解决于 2011-07-21 22:36

像当当、京东、卓越这些网站都有两个搜索功能:模糊搜索和高级搜索,谁知道他们的搜索功能是怎么实现的?数据是如何存储的,比如我要按照书名、作者、类别进行搜索,感觉速度很慢?我的表的设计:

Book表:ID、书名、作者、出版日期(Datetime)、出版社(nvarchar)等;
Category表:ID、分类名称;
Book分类映射表(一本书可以属于多个分类):BookID,分类ID
搜索的时候Like %书名%,%作者%,等

Uephee的主页 Uephee | 初学一级 | 园豆:13
提问于:2011-07-18 12:16
< >
分享
最佳答案
0

至于他们是如何实现的,不清楚,以下提供一些个人的思路。对搜索方面研究的不多不深,不妥之处请见谅,呵呵。

 

1,你的Book分类映射表完全没有必要,书的分类可以使用位标记,按分类搜索的时候,只需要判断下数字的大小就可以了。如果网站的书目比较繁多复杂且有修改的可能,可以保留Category表,记录下种类名和对应的位数。如果是比较简单的几大类,Category表也可以撤掉了。

 

2,使用适当的分页策略。比方说,如果搜索结果大多是根据登记到网站的时间降序的,完全可以把这个时间作为主键(防止冲突精确到毫秒),分页查询的时候第二页以上的只需要在后面加一条时间是否小于前一页最后一条的判断语句就可以了。其他用户使用相对较少的排序方式,比方说价格什么的,设置成索引。出版社,作者,看情况决定是设置成索引还是各自做成映射表。

 

3,像图上那样的搜索表单,根据哪个条件返回的结果集最小或者搜索的速度最快,就先搜哪个,再在返回结果集里搜索其他的条件。比方说按优先度isbn>作者>出版社>类别等

 

4,如果书的数量实在太多了,使用Like模糊搜索的速度实在无法忍受。可以考虑装个分词组件,按词把所有的书全部索引一遍。

收获园豆:30
vons | 小虾三级 |园豆:1033 | 2011-07-19 04:41
谢谢。Out了,正在研究Lucene.Net。
Uephee | 园豆:13 (初学一级) | 2011-07-21 22:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册