3

好吧,我已经尝试了 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);

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

问题是:Visual Studio 给了我一个错误,azureDirectory即插入IndexWriter的需要是类型Directory而不是AzureDirectory. 但是,当我将其类型更改Directory为时,它说这AzureDirectory不是Directory.

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

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

4

3 回答 3

2

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

https://github.com/richorama/AzureDirectory

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

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

于 2012-11-15T19:29:39.173 回答
0

它不工作......这是我为什么不工作以及你可以做什么的答案: 如何在 Azure webrole 上实现 Lucene .Net 搜索

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

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

于 2012-11-13T20:55:26.740 回答
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);
于 2012-11-13T21:32:49.340 回答