如何让Lucene.net 3.0.3.0与Azure协同工作?

时间:2012-11-13 20:07:55

标签: azure lucene full-text-search lucene.net

好吧,我一直试图让这个工作2天:我希望对Azure工作者角色进行全文搜索。我认为Lucene.NET对此有好处。我使用过这个例子:Use AzureDirectory with Lucene.NET 3.0.3.0

我正在使用以下代码:

CloudStorageAccount cloudAccount = CloudStorageAccount.FromConfigurationSetting("CloudStorageSetting");
var cacheDirectory = new RAMDirectory();
AzureDirectory azureDirectory = new AzureDirectory(cloudAccount, "MyCloudIndex", cacheDirectory);
Analyzer analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30);
IndexWriter indexWriter = new IndexWriter(azureDirectory, analyzer, IndexWriter.MaxFieldLength.UNLIMITED);

使用Lucene.Net 3.0.3.0和Lucene.Net.Store.Azure 1.0.5.1,在Azure SDK 1.8上。我也尝试过较旧的Lucene.NET(2.9.xxx),但这也无效。我更新了Windows.Azure.Storage:仍然无效。

问题是:Visual Studio给出了一个错误,即插入azureDirectory的{​​{1}}需要是IndexWriter类型而不是Directory。当我将其类型更改为AzureDirectory时,它会说Directory不是AzureDirectory的子类型。

为什么互联网上的所有示例都是错误的,当我真正复制粘贴它们时不起作用?

更新:问题已修复,我写了一篇关于它的博文:http://leoncullens.nl/post/2012/11/18/Full-Text-Search-on-Azure-with-LuceneNET.aspx

3 个答案:

答案 0 :(得分:2)

我已经“分叉”了这个project,将Lucene引用更新为3.0.3,并将Azure存储客户端更新为2.0(v1.8 SDK附带的版本),并将代码放在此处:

https://github.com/richorama/AzureDirectory

复制“TestApp”中的示例代码以确定如何使用此版本的Lucene.NET应该相对简单。

*免责声明,我不是Lucene专家,我没有正确测试过 - 使用风险自负!

答案 1 :(得分:0)

它不能正常工作......以下是我为什么不能和你能做什么的答案: How to implement Lucene .Net search on Azure webrole

这是另一个可能有帮助的答案,但我不同意这种方法: https://azuredirectory.codeplex.com/discussions/402913

编辑:我应该澄清,当我说“工作”时,我的意思是在生产环境中工作。

答案 2 :(得分:0)

几个月前,这个设置适用于LUCENE版本2.9和较旧的Azure SDK。工作和非工作之间的主要区别是不使用RAMDirectory,因为它最终耗尽了RAM。在不使用RAMDirectory之后,我成功地索引了25 GB的数据。

_azureDirectory  = new AzureDirectory
    ( storageAccount 
    , catalogName
    //, new RAMDirectory());

_version = Lucene.Net.Util.Version.LUCENE_29;

_analyzer = new StandardAnalyzer(_version);


IndexWriter
writer = new IndexWriter(
                  _azureDirectory, 
                  _analyzer,
                  newIndex, // new index or update
                  IndexWriter.MaxFieldLength.UNLIMITED);

writer.SetUseCompoundFile(false);
writer.SetRAMBufferSizeMB(800);
writer.SetMergeFactor(10);