Используйте AzureDirectory с Lucene.NET 3.0.3.0

Я загружаю AzureDirectory и с последней версией Lucene.NET просто не могу скомпилировать

Много ошибок вроде

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

Есть ли новый AzureDirectory, который может работать с Lucene 3?


person Eric Yin    schedule 15.08.2012    source источник


Ответы (4)


Я протестировал Lucene.Net.Store.Azure 1.0.5.1 с Lucene.Net 3.0.3, который у меня работал. Я использовал следующие шаги, чтобы вы могли попробовать:

  1. Создал рабочую роль Windows Azure в VS2010.
  2. Включен Lucene.NET.Store.Azure (1.0.5.1) из здесь (который имеет зависимость от Lunece.NET 2.9.4.1 и выше) с использованием диспетчера пакетов VS

    2.1 PM> Install-Package Lucene.Net.Store.Azure

  3. После этого я обновил Lucene.net до 3.0.3 RC из здесь, что удалило Lucene.net 2.9. 4.1 и установлена ​​3.0.3 бита

    3.1 PM> Install-Package Lucene.Net -Pre

  4. Убедившись, что у меня есть последние биты и все зависимости, установленные в моем проекте, я добавил следующий тестовый код в свою рабочую роль:

    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();
    

Ошибки компиляции не было, и роль работала нормально, поэтому вы можете попробовать то же самое и посмотреть.

person AvkashChauhan    schedule 15.08.2012
comment
хорошо, вы загружаете DLL, я загружаю исходный код, может быть, в этом разница, попробую ваш способ - person Eric Yin; 16.08.2012
comment
Ваш пример не работает. Я установил точно такие же пакеты, но не могу вставить azureDirectory в IndexWriter(), поскольку для этого требуется подкласс Directory (а AzureDirectory не является подтипом Directory). - person Leon Cullens; 14.11.2012
comment
Те, кто проголосовал против ответа, пожалуйста, поймите, что, когда я ответил на этот вопрос, Lucene 3.0.3 была в RC, и она работала, как написано выше. После выпуска Lucene 3.0.3 произошли некоторые изменения, которые могли бы сделать приведенный выше ответ неприменимым, но когда-то он был применим. - person AvkashChauhan; 27.11.2012
comment
Привет, я знаю, что этот ответ был опубликован некоторое время назад, но могу ли я узнать, где именно я должен поместить код, указанный выше? Я создал простое приложение TestApplication и выполнил шаги, кроме пункта 4. - person Eytch; 07.04.2014

Я только что скачал AzureDirectory 1.0.5.1 из Nuget и декомпилировал его с помощью JustDecompile. Класс AzureDirectory не реализует несколько абстрактных членов класса Directory в Lucene.net 3.0.3 (выпускная версия), например ListAll(). Поэтому AzureDirectory 1.0.5.1 не может быть совместим с Lucene.net 3.0.3.

Надеемся, что авторы вскоре обновят AzureDirectory для поддержки этой новой версии Lucene.net. А пока предлагаю покопаться в коде самому... этим я и занимаюсь. Хотя не уверен, добьюсь ли я успеха, поскольку я не в курсе внутренней работы Lucene.

person krisdyson    schedule 03.11.2012

Всем спасибо за помощь, у меня есть 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()?

person dimoss    schedule 14.01.2013

Вы можете использовать этот репозиторий GitHub: https://github.com/richorama/AzureDirectory
У вас есть создать его самостоятельно, но он работает, как и ожидалось, с Lucene 3.0.3 и Azure Tools 2.

person SeriousM    schedule 05.12.2012