如何在Azure Blob上实现快速搜索?

时间:2014-06-06 11:13:45

标签: c# azure

我完成了编写代码以将文件(文本文件)上传到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 个答案:

答案 0 :(得分:0)

Blob存储对于这种工作并不是很好,因为通过HTTP进行的文件读取不是非常快或随机访问。你需要的是像Lucene这样的搜索索引器。

这个Lucene.Net库看起来可能就像你之后的那样:

https://azuredirectory.codeplex.com/