Как реализовать быстрый поиск на Azure Blob?

Я закончил с написанием кода для загрузки файлов (текстовых файлов) в хранилище azure blob. Теперь я хочу предоставить поиск на основе содержимого текстовых файлов. Напр. Если я ищу "Hello", тогда имя файла, содержащего слова "Hello", должно появиться в результатах поиска. Здесь мой код для поиска

class BlobSearch
{
 static void Main(string[] args)
 {
 string searchText = "Hello"; 
 CloudStorageAccount account = CloudStorageAccount.Parse(azureConString);
 CloudBlobClient blobClient = account.CreateCloudBlobClient();
 CloudBlobContainer blobContainer = blobClient.GetContainerReference("MyBlobContainer");

 blobContainer.FetchAttributes();

 var blobItemList = blobContainer.ListBlobs();

 foreach (var item in blobItemList)
 {
 string line = string.Empty;
 CloudBlockBlob blockBlob = blobContainer.GetBlockBlobReference(item.Uri.ToString());

 if(blockBlob.Name.Contains(".txt"))
 {
 int lineno = 1;

 using (var stream = blockBlob.OpenRead())
 {
 using (StreamReader reader = new StreamReader(stream))
 {
 while ((line = reader.ReadLine()) != null)
 {
 if (line.IndexOf(searchText) != -1)
 { 
 Console.WriteLine("Line : " + lineno +" => "+ blockBlob.Name);
 }
 lineno++;
 }
 }
 } 
 } 
 }
 Console.WriteLine("SEARCH COMPLETE");
 Console.ReadLine();
 }
}

Над кодом работает, но он слишком медленный. Есть ли способ сделать это быстрее или может улучшить код выше.

1 ответ

Хранилище Blob не подходит для такого рода работ, поскольку чтение файлов по HTTP не очень быстрое или произвольное. Вам нужен поисковый индексатор, такой как Lucene.

Эта библиотека Lucene.Net выглядит так, как будто это может быть то, что вам нужно:

https://azuredirectory.codeplex.com/

licensed under cc by-sa 3.0 with attribution.