详述机票搜索的实现原理
相比于传统搜索,垂直搜索有其独到的优势,一方面是及时性,其次是信息组织的规整。
机票搜索的实现原理可以概括为:后台抓取+ 前端展示。
大家现看一个例子: http://jipiao.wendoo.com 。 下面就结合该机票搜索的实现方式详细谈一谈。
后台抓取
后台抓取分: 中央缓存器+crawler
crawler:从机票订票网站抓取数据。和传统crawler相比,它们更智能一些,也可以说更笨一些,因为不同网站的页面结构是不同的,而我们抓取回 来要分清楚哪些是航班信息,哪些是价格信息 等等。 所以这里的crawler是用模板配置的,针对一个订票网站写一个crawler。 而这里crawler要抓取的不是一个普通的页面,而是根据一定查询条件的表单提交,所以要一个个分析订票网的表单提交方式,然后模拟其表单提交进行查 询,从而抓到想要的结果。
中央缓存器:用来缓存抓取的机票数据。中央缓存器又分两种,一种是及时性缓存,存查询的航班的机票价格;另一种是持久性缓存,一般存一个月或一年的机票价格数据,用来统计机票价格趋势,做数据分析用。
鉴于机票价格搜索这种对时间要求非常高的应用,缓存策略至关重要。下面看一个例子回来再详说原理:
大家看到搜索页顶端显示正在搜索XXX订票网站,貌似是时时的去抓取价格,可做技术的人应该知道,如果时时抓取几十个订票网的成本太大了,一方面是自己的成本,为保证并发访问速度,需要非常多的抓取机器;另一方面是增大了目标网站的负载,多数会把你屏蔽掉的。 我们这里分析了机票价格变化的时间周期,采取了一定的缓存策略来解决这个问题,即保证了用户查到机票价格的准确性又保证了抓取负担最小化。以上面查询为例,假如第一次查询北京到广州该天的机票,这时crawler会老老实实一个一个抓取目标网站结果回来,如果一看缓存中已经有现成的数据了且没有过期,则直接返回结果。这个缓存策略可以做的足够灵活,比如不同航线的价格变化周期是不同的,用户需求量也是不同的(北京到广州的航班数量和价格变化和查询的次数都远远大于北京到成都的,所以根据这点不同可以制定更为合理的缓存策略。
到此为止说的是时时机票的缓存策略,令一部分是持久性缓存,主要做数据分析用的,比如预测航班价格趋势等等,这里不做详述了。
前端展示
待续