1:很久以来,对搜索的认识一直停留在百度搜索,觉得这种东西自己的项目关系不大
2:学会了sql之后,对搜索的了解上升到模糊查询,LIKE '%****%',
3:了解到lucene.NET的存在后,知道了社区里面有专业的搜索方案,但中文分词缺乏,所以我拒绝使用。
一直到我经历了下面这些丑事
1:数据库的一个表分表后,要得到满足条件一组的数据,以前简单的select出来,现在select一下,数据库内存就不够了或io就满了
2:为了给主要业务数据库做主从,把一个表写的非常频繁的字段单独拎出来,放在另外一个数据库里面,然后就无法按照这个字段排序了
3:要读出一组数据,排序是很复杂的那种,写出来的sql不是吧cpu弄挂了,就是把io弄挂了
然后这些事情让 我司的一个搜索组搞定了。。。。。。。。。。。
刨根问底,是我以前总认为搜索和检索词有关系,有搜索就有检索词,没有检索词就没有搜索
也自己知识面太狭小,实际上,只要是数据库做了主从或读写分离,数据表基本上都都存在横向拆分和纵向拆分,这个时候如果要得到一个简单的数据列表,如果走普通的sql,数据库的io随着压力的增加,肯快就挂掉了,
所以,很多公司 都将搜索作为系统数据聚合的工具,各种列表走搜索,各种详情页面则直接走数据库+缓存
对与lucene.NET,性能自然不是问题,加上现在可以跑在mono上,性能更是没问题,作为数据聚合的工具,没的说。
关于中文检索,有盘古分词,小伙伴们说,效果还过得去。不过我更看中lucene.NET作为数据库聚合的手段,用来显示各种列表。