Utilizando o Lucene e Azure Websites

Neste post eu vou falar como utilizar o Lucene.Net em uma aplicação hospedada no Azure. Para quem ainda não conhece, o Lucene.Net é um port feito do projeto Apacha Lucene e tem como objetivo realizar full-text search de maneira performática. Ele foi inicialmente escrito em Java, porém recebeu um port linha por linha para o .Net (por isso, muitas vezes o lucene.net não parece ser muito idiomático para quem está escrevendo código em .net).

Para começar, é necessário instalar tanto o Lucene.net, quanto o AzureDirectory:


Install-Package Lucene.Net
Install-Package Lucene.Net.Store.Azure

A grande diferença que acontecerá é passar a utilizar a classe AzureDirectory no lugar de um FSDirectory ou RAMDirectory. O que a classe AzureDirectory fará é utilizar um Windows Azure Blob Storage no lugar de um diretório local, ou a própria memória do computador.

        public void Indexar(string conteudo)
        {
            using (var directory = new AzureDirectory(CloudStorageAccount.Parse(ConfigurationManager.AppSettings["FilesStorageConnectionString"])))
            using (var analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30))
            using (var writer = new IndexWriter(directory, analyzer, false, MaxFieldLength.UNLIMITED))
            {
                var document = new Document();
                document.Add(new Field("Conteudo", conteudo, Field.Store.YES, Field.Index.ANALYZED));

                writer.AddDocument(document);
                writer.Flush(true, true, false);
            }
        }

Note que “FilesStorageConnectionString” é a conexão do seu blob storage no Azure. Note que tirando a utilização do AzureDirectory, o código é exatamente igual a qualquer implementação de indexação / procura no Lucene.Net.

Por hoje é só 😉

Anúncios