用 Sphinx 搭了一个全文检索。虽说 Sphinx 本身已经实现了很多功能,简单应用基本只需要配置就行用,不需要做很多开发。但我做的玩意不简单,所以还是碰到了不少麻烦事。
一个是分布式索引更新问题。文档里说是分布式索引也支持更新。但我搭了一个两层的索引,第一层是 remote 的,第二层是 local 的,结果就返回0(失败)。后来咨询了一下,再试验了一下,发现单层的分布索引没问题,两层 remote 或者两层 local 也没问题,就是混用不行…… 不清楚这么设计的意图是啥。
Sphinx 出于搜索性能考虑,并没有直接实现增量索引功能,需要自己实现。一般是先为增量部分单独建一个小索引,然后合并回原来的索引。虽然会引起两倍于原索引的IO,但速度还挺快。
配置文件不灵活也是个缺点。Sphinx 的配置文件不支持 include 。每个不同的 searchd 实例需要加载不同的配置文件。如果不同的配置文件里有不少重复的部分,每个 copy 一份维护就麻烦。只好用模版程序生成了。我用的 coreseek 的版本。其中加入了一个 python 数据源。我用它包装了一个 json pipe 数据源。然后需要配置一个命令行命令。然后发现,所有能用的配置项都写死在了程序里。只有这些配置项能用。想增加新的配置项只有去改源代码。为了避免以后维护补丁的麻烦,就只好复用原来的 xmlpipe_command 了。好歹是个 command……
Sphinx 还是不够成熟,但对于小型网站来说足够简单易用,功能很丰富,性能也很好,并且有许多语言的绑定。但是在可扩展性和二次开发上还是不够。
做豆瓣的使用调研时,我们发现,豆瓣成员们在挑选书、电影、唱片时,对“评分”的关注度很高。我们为每一个条目增加了 “豆瓣评分”(在评价分布图上方)。
“豆瓣评分”是海量豆瓣用户评价数据的平均值,通过算法的调校滤掉了恶意评价对数据的影响。更客观准确地反映一部电影、一本书、一张唱片的真正价值。并且其形式更为直观(平均的评星数及一个折算后的分值),今后你会在更多地方看到它。
以电影为例,点击评分下方 XXX人评价 ,你将会看到一张最近3个月内参这部电影评价数的趋势图。
与此同时,我们对影片的介绍区进行了一些小改动(图1),将分布在各处的操作集中在一起,便于你使用。(如果你是一个豆瓣收藏狂人,可能会出现短期的排异反应,需要花一点时间来适应: )
五月 2009 | ||||||
一 | 二 | 三 | 四 | 五 | 六 | 日 |
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |