1

プロジェクトで Lucene.NET を使用しており、AzureDirectory ライブラリ ( https://azuredirectory.codeplex.com/ )を通じて使用しています。

1 つの webrole と 1 つの worker ロールがあります。インデックスは、worker ロール スレッドを介して作成および更新されます。IndexSearcher を作成して、webrole から検索します。現在私が直面している問題は、管理コンソールを使用して cspkg をアップグレードし、prodn サーバーのビットをアップグレードすると、作成された lucene インデックスが突然機能しなくなることです。次のようなエラーが表示されます。

ファイル _2c.fdt が見つかりません (FileNotFoundException)

C:\Dev\code\Lucene.Net\Index\SegmentInfos.cs:line 741 の Lucene.Net.Index.SegmentInfos.FindSegmentsFile.Run() で Lucene.Net.Index.DirectoryIndexReader.Open(Directory directory, Boolean closeDirectory C:\Dev\code\Lucene.Net\Index\DirectoryIndexReader.cs:C:\Dev\ の Lucene.Net.Index.IndexReader.Open(Directory directory, Boolean closeDirectory, IndexDeletionPolicy RemovalPolicy) の 140 行目code\Lucene.Net\Index\IndexReader.cs: C:\Dev\code\Lucene.Net\Index\IndexReader.cs: Lucene.Net.Index.IndexReader.Open(ディレクトリ ディレクトリ) の 257 行: Lucene の 236 行C:\Dev\code\Lucene.Net\Search\IndexSearcher.cs の .Net.Search.IndexSearcher..ctor(ディレクトリ ディレクトリ):91 行目

ただし、lucene BLOB コンテナーを再度チェックインすると、特定の .fdt ファイルが存在します。実際、アップグレードの直前まで検索は問題なく機能していました。ビットをアップグレードする前に、webrole と worker ロールの両方がシャットダウンされていることを確認しました (アップグレード中にインデックスが更新されないようにするため)。

キャッシュとして RAMDirectory を使用する AzureDirectory であることに注意してください。

労働者の役割コード:

    public static void CreateNewEntities(List<string> smids)
    {
        AzureDirectory azureDirectory = GetAzureDir();
        IndexWriter indexWriter = new IndexWriter(azureDirectory, CommonAnalyzer.getAnalyzer());
        indexWriter.SetUseCompoundFile(false);

        foreach (string smid in smids)
        {
            List<Document> docs = GetDocs(smid);    // Gets docs for this entity
            foreach (Document d in docs)
            {
                indexWriter.AddDocument(d);
            }
        }

        indexWriter.Close();
    }

    public static void EditEntityInIndex(List<string> smids)
    {
        // delete this surfmark from the index, and recreate the same
        AzureDirectory azureDirectory = GetAzureDir();
        IndexWriter indexWriter = new IndexWriter(azureDirectory, CommonAnalyzer.getAnalyzer());
        indexWriter.SetUseCompoundFile(false);

        foreach (string smid in smids)
        {
            indexWriter.DeleteDocuments(new Term(IndexingFields.ID, smid));
            List<Document> docs = GetDocs(smid);
            foreach (Document d in docs)
            {
                indexWriter.AddDocument(d);
            }
        }
        indexWriter.Flush();
        indexWriter.Close();
    }

Web Role コード部分 (検索用):

    public static IndexSearcher GetIndexSearcher()
    {//Method to get the indexsearcher obj which is refreshed every 10 mins
        long ctime = DateTime.Now.Ticks/TimeSpan.TicksPerMillisecond;
        if (_srchr == null || ctime - _srchrTime > 600000)  // refresh every 10 mins
        {

        _srchr = new IndexSearcher(GetAzureDir());
        _srchrTime = DateTime.Now.Ticks/TimeSpan.TicksPerMillisecond;

        }

        return _srchr;
    }





        string[] fields = { /*list of fields to be searched on*/};
        IndexSearcher searcher = GetIndexSearcher();
        Hits hits = searcher.Search(mainQuery);

誰かがここで助けてもらえますか?

ありがとう

カピル

4

1 に答える 1

0

最初に Process Monitor を使用して、不足しているファイルがあると思われる場所にあることを確認します。(少なくとも私にとっては) アップグレード中に、サーバー構成が変更されたときにこのようなエラーが発生するのは簡単です。 .

于 2013-02-10T17:00:05.377 に答える