我正在使用 Lucene.Net + 自定义爬虫 + Ifilter,以便我可以索引 blob 内的数据。
foreach (var item in containerList)
{
CloudBlobContainer container = BlobClient.GetContainerReference(item.Name);
if (container.Name != "indexes")
{
IEnumerable<IListBlobItem> blobs = container.ListBlobs();
foreach (CloudBlob blob in blobs)
{
CloudBlobContainer blobContainer = blob.Container;
CloudBlob blobToDownload = blobContainer.GetBlobReference(blob.Name);
blob.DownloadToFile(path+blob.Name);
indexer.IndexBlobData(path,blob);
System.IO.File.Delete(path+blob.Name);
}
}
}
/*Code for crawling which downloads file Locally on azure instance storage*/
下面的代码是使用 IFilter 的索引器函数
public bool IndexBlobData(string path, CloudBlob blob)
{
Lucene.Net.Documents.Document doc = new Lucene.Net.Documents.Document();
try
{
TextReader reader = new FilterReader(path + blob.Name);
doc.Add(new Lucene.Net.Documents.Field("url", blob.Uri.ToString(), Lucene.Net.Documents.Field.Store.YES, Lucene.Net.Documents.Field.Index.NOT_ANALYZED));
doc.Add(new Lucene.Net.Documents.Field("content", reader.ReadToEnd().ToString(), Lucene.Net.Documents.Field.Store.YES, Lucene.Net.Documents.Field.Index.ANALYZED));
indexWriter.AddDocument(doc);
reader.Close();
return true;
}
catch (Exception e)
{
return false;
}
}
现在我的问题是我不想下载实例存储上的文件。我直接想将文件传递给FilterReader。但它需要“物理”路径,传递http地址不起作用。有人可以建议任何其他解决方法吗?我不想再次从 blob 下载相同的文件然后对其进行索引,而是更喜欢下载并将其保存在主内存中并直接使用索引过滤器。