将AzureDirectory与Lucene.NET 3.0.3.0一起使用

时间:2012-08-15 14:48:46

标签: c# azure lucene.net azure-storage-blobs

我下载AzureDirectory和最新的Lucene.NET 根本无法编译

很多错误,比如

'Lucene.Net.Store.Azure.AzureDirectory' does not implement inherited abstract member 'Lucene.Net.Store.Directory.Dispose(bool)'

是否有可以使用Lucene 3的新AzureDirectory?

5 个答案:

答案 0 :(得分:2)

我刚刚从Nuget下载了AzureDirectory 1.0.5.1,并使用JustDecompile对其进行了反编译。 AzureDirectory类不实现Lucene.net 3.0.3(发行版)中的Directory类中的几个抽象成员,例如ListAll()。因此,AzureDirectory 1.0.5.1无法与Lucene.net 3.0.3兼容

希望作者能够尽快升级AzureDirectory以支持这个新版本的Lucene.net。与此同时,我建议自己深入研究代码......这就是我正在做的事情。虽然不确定我是否会成功,因为我不会对Lucene的内部运作感到失望。

答案 1 :(得分:2)

This链接有最新的东西,适用于lucene 3.0.3和最新的10月SDK

答案 2 :(得分:1)

我用Lucene.Net 3.0.3测试了Lucene.Net.Store.Azure 1.0.5.1,它对我有用。我使用了以下步骤,您也可以尝试:

  1. 在VS2010中创建了Windows Azure辅助角色
  2. 使用VS Package Manager包含来自here的Lucene.NET.Store.Azure(1.0.5.1)(依赖于Lunece.NET 2.9.4.1及更高版本)

    2.1 PM>安装包Lucene.Net.Store.Azure

  3. 之后我将Lucene.net从here更新为3.0.3 RC,删除了Lucene.net 2.9.4.1并安装了3.0.3位

    3.1 PM>安装包Lucene.Net -Pre

  4. 验证我的项目中有最新的位和所有依赖项集,我在我的worker角色中添加了以下测试代码:

    Lucene.Net.Util.Version version = Lucene.Net.Util.Version.LUCENE_30;
    Microsoft.WindowsAzure.CloudStorageAccount cloudAccount = Microsoft.WindowsAzure.CloudStorageAccount.FromConfigurationSetting("CloudStorageSetting");
    var cacheDirectory = new RAMDirectory();
    AzureDirectory azureDirectory = new AzureDirectory(cloudAccount, "MyCloudIndex",cacheDirectory);
    IndexWriter indexWriter = null;
    Analyzer analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30);
    indexWriter = new IndexWriter(azureDirectory, analyzer, IndexWriter.MaxFieldLength.UNLIMITED); 
    Document doc = new Document();
    indexWriter.AddDocument(doc);
    indexWriter.Dispose();
    azureDirectory.Dispose();
    
  5. 没有编译错误,角色确实工作正常,所以你可以试试看看。

答案 3 :(得分:1)

感谢大家的帮助,我的AzureDirectory包含Lucene 3.0.3.0和最新的Azure SDK。

我有一个问题。我有4个独特的Lucene指数,针对不同国家的产品基本不同。 " lucenedb-us"," lucenedb-au"," lucenedb-eu"等。

AzureDirectory缓存的工作原理是什么?

请问:

azureDirectory = new AzureDirectory(cloudStorageAccount, "lucenedb-us", new RAMDirectory());

然后:

azureDirectory = new AzureDirectory(cloudStorageAccount, "lucenedb-au", new RAMDirectory());

会产生准确的结果,或者代码会一直使用" lucenedb-us"?如果它始终使用" lucenedb-us",是否会删除new RAMDirectory()来解决问题?

答案 4 :(得分:0)

您可以使用此GitHub存储库:https://github.com/richorama/AzureDirectory
您必须自己构建它,但它与Lucene 3.0.3和Azure Tools 2一样正常工作。