我完成了编写代码以将文件(文本文件)上传到azure blob存储。现在我想提供基于文本文件内容的搜索。对于前者如果我搜索"你好"那么包含" 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();
}
}
上面的代码正在运行,但速度太慢了。有没有办法更快地完成它或者可以改进上面的代码。
答案 0 :(得分:1)
// get blob data
CloudBlob cloudBlob = blobContainer.GetBlobReference(blobName);
string text = cloudBlob.DownloadText();
也许一次下载它比在循环中逐行读取更快?
答案 1 :(得分:1)
这是一个非常糟糕的方法。这将是非常缓慢的。最好的选择是Azure Search。搜索现在可以自动索引您的blob!
答案 2 :(得分:0)
你的代码还不错。找出大部分时间花在哪里。可能是网络或CPU。对于网络,你运气不好。对于CPU,您可以并行化。
您正在使用特定于文化的字符串处理。 StringComparison.Ordinal
远不如CPU密集(如10x)。但它有不同的语义。