AzureDirectory Library for Lucene.Net
Sql Azure不支持全文索引的,所以微软官方推荐的做法是基于lucene来做全文索引,而且也有一个基于Azure Storage的Lucene.Net开源组件,已经支持到了最新的lucene.net 3.0.3。可以在CodePlex上下载到最新代码“AzureDirectory Library for Lucene.Net” http://azuredirectory.codeplex.com/ ,也可以通过NuGet获取。
在使用过程中,发现检索速度的话,第一次很慢,因为它要把Storage的索引文件同步到本地缓存目录,后面就快了,都是从本地读取。这个机制有个很大的问题,就是如果索引文件大,对本地缓存目录空间大小有较高要求,否则就会出现磁盘空间不足导致的问题。
建索引的时候,配置好Storage Account和Catalog Name (其实就是Storage的Container),就会将索引文件同步到Storage。
在使用时建索引过程中,被坑过一次,最开始本地测试索引还是比较顺利,后来传到Azure上,开了个Worker Role,专门建索引,刚开始还好,但过了半天才发现压根就没索引上,索引文件没写入到Azure Storage,去看了一下文档,才发现它建索引实际上上是先建在本地,本地好了后,在indexWriter close的时候,就同步到Storage上去,它默认是本地的临时目录,如果基于WorkerRole,临时目录似乎不能太大,索引一会就出现说磁盘空间不足的异常。于是把缓存目录改成了Worker Role的本地目录,结果如何还需要观察。
另外它也建议不要去调用indexWriter的optimize()优化操作(Calling Optimize() is a really bad idea because it causes ALL SEGMENTS to be merged into ONE SEGMENT),因为这会将索引文件会合并成为一个很大的索引文件,而这样会导致整个索引文件都要重建,重新下载上传。
详细说明还是请参考其文档:http://azuredirectory.codeplex.com/
如果有兴趣体验,可以访问:http://www.openlab.co/search?q=%E8%A5%BF%E5%B7%A5%E5%A4%A7
目前已经将我自己的网站全部迁移到Azure: Web Role + Sql Azure + Azure Storage + Service Bus
后面会分享一些迁移过程中遇到的问题和心得。