从零开始使用Hubbledotnet进行全文搜索-前言
数据库检索时代
在开发艺外1.0时候,我们需要设计一个对资讯、媒体、演艺等相关的全文检索;那时候我们全使用的基于SQL Server 2005全文索引进行搜索。
通手这个手段进行的搜索开发相对简单,与我们去查询一个普通的表没有区别,例如:Select * from SearchAll where Contains(title, ”艺外”),但他的缺点也很明显,例如我只知道这个演艺事件可能包含了“黄升民”和”四大法宝“,那么搜索的结束就有限了,我如果搜索:Select * from SearchAll where Contains(title, ”黄升民” or “四大法宝”),这样的搜索结果肯定不是我们想要的一个结果,因为全文索引是一个精准的匹配,另外一个问题是我们在使用数据库全文检索进行搜索时,速度与性能成为我们的瓶颈。
分词检索时代
后来我们在开发艺外2.0时候,我要必须要去解决搜索的问题,于是我们想到了基于分词的搜索引擎,摆在我们面前的是从JAVA移植过来的Lucene.net,以及我们国人自主研发的盘古分词。这就是解决了我们在艺外1.0开发时候遇到的我们搜索”黄升民四大法宝“时候,搜索不到的问题。
通过Lucene.net加盘古分词进行搜索“黄升民四大法宝”时候,他会把这个词戏拆分为多个关建词进行搜索,通过盘古分词器我们可以看到拆分为了“黄升民/四大/法宝/”。同时,Lucene.net使用了文件进行索引文件的存储与读取,因此也解决了我们在速度与性能上面的问题。
但我们在使用Lucene.net2.9以及最新的3.0进行测试后发现,我们要对搜索结果进行权重排序时遇到问题,很多自动排序的结果,并不是我们最理想的排序结果。
另一方面,随着我们艺外数据不断增加,Lucene.net的性能问题也会成为瓶颈,大家如果对Lucene.Net排序有更好的方法的话,可以分享给我。
基于多引擎的混合搜索时代
随着我们艺外开发进程,我意识到我们必须要去解决更多的问题,我们要成为中国最好的媒体海量数据库,我们就必须去解决搜索的问题我们要去实现如下的目标:
- 统一架构下的搜索,而不是像现在去单一的搜索资讯、媒体、演艺
- 对搜索的关键词能更好的分词
- 对搜索的结果能更好的排序
- 能更快速的搜索出结果,提供更好的用户体验。
我想,这也许是基于混合搜索的时代。在下一篇文章里面,我将带大家去认识一个新的搜索方案。