2

我问的问题是因为我不想使用 AzureDirectory 项目。我只是在自己尝试一些事情。

cloudStorageAccount = CloudStorageAccount.Parse("DefaultEndpointsProtocol=http;AccountName=xxxx;AccountKey=xxxxx");

        blobClient=cloudStorageAccount.CreateCloudBlobClient();


        List<CloudBlobContainer> containerList = new List<CloudBlobContainer>();
        IEnumerable<CloudBlobContainer> containers = blobClient.ListContainers();
        if (containers != null)
        {
        foreach (var item in containers)
        {
            Console.WriteLine(item.Uri);
        }
        }
        /* Used to test connectivity 
        */
        //state the file location of the index

        string indexLocation = containers.Last().Name.ToString();
        Lucene.Net.Store.Directory dir =
            Lucene.Net.Store.FSDirectory.Open(indexLocation);

        //create an analyzer to process the text
        Lucene.Net.Analysis.Analyzer analyzer = new
        Lucene.Net.Analysis.Standard.StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30);

        //create the index writer with the directory and analyzer defined.

        bool findexExists = Lucene.Net.Index.IndexReader.IndexExists(dir);

        Lucene.Net.Index.IndexWriter indexWritr = new Lucene.Net.Index.IndexWriter(dir, analyzer,!findexExists, Lucene.Net.Index.IndexWriter.MaxFieldLength.UNLIMITED);
        //create a document, add in a single field
        Lucene.Net.Documents.Document doc = new  Lucene.Net.Documents.Document();
        string path="D:\\try.html";
        TextReader reader = new FilterReader("D:\\try.html");
        doc.Add(new Lucene.Net.Documents.Field("url",path,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));
        indexWritr.AddDocument(doc);
        indexWritr.Optimize();
        indexWritr.Commit();
        indexWritr.Close();

现在的问题是索引完成后我看不到容器内创建的任何文件。有人可以帮帮我吗?

4

2 回答 2

6

您在那里使用 FSDirectory,它将文件写入本地磁盘。

您正在向它传递 blob 存储中的容器列表。Blob 存储是通过 REST API 提供的服务,不能直接从文件系统寻址。因此 FSDirectory 将无法将您的索引写入存储。

您的选择是:

  1. 在机器上挂载 VHD 磁盘,并将 VHD 存储在 blob 存储中。这里有一些关于如何执行此操作的说明:http: //blogs.msdn.com/b/avkashchauhan/archive/2011/04/15/mount-a-page-blob-vhd-in-any-windows-azure -vm-outside-any-web-worker-or-vm-role.aspx
  2. 使用您在问题中引用的 Azure 目录。我已经针对最新的存储 SDK 重建了 AzureDirectory:https ://github.com/richorama/AzureDirectory
于 2012-12-11T12:39:36.910 回答
0

人们环顾四周的另一种选择 - 我编写了一个使用 azure 共享缓存(预览版)的目录,它可以作为 AzureDirectory 的替代品(尽管适用于有界搜索集)

https://github.com/ajorkowski/AzureDataCacheDirectory

于 2013-04-02T12:05:22.270 回答