至于他们是如何实现的,不清楚,以下提供一些个人的思路。对搜索方面研究的不多不深,不妥之处请见谅,呵呵。
1,你的Book分类映射表完全没有必要,书的分类可以使用位标记,按分类搜索的时候,只需要判断下数字的大小就可以了。如果网站的书目比较繁多复杂且有修改的可能,可以保留Category表,记录下种类名和对应的位数。如果是比较简单的几大类,Category表也可以撤掉了。
2,使用适当的分页策略。比方说,如果搜索结果大多是根据登记到网站的时间降序的,完全可以把这个时间作为主键(防止冲突精确到毫秒),分页查询的时候第二页以上的只需要在后面加一条时间是否小于前一页最后一条的判断语句就可以了。其他用户使用相对较少的排序方式,比方说价格什么的,设置成索引。出版社,作者,看情况决定是设置成索引还是各自做成映射表。
3,像图上那样的搜索表单,根据哪个条件返回的结果集最小或者搜索的速度最快,就先搜哪个,再在返回结果集里搜索其他的条件。比方说按优先度isbn>作者>出版社>类别等
4,如果书的数量实在太多了,使用Like模糊搜索的速度实在无法忍受。可以考虑装个分词组件,按词把所有的书全部索引一遍。