1

私は次のコードを持っています

        IDocumentSession documentSession = store.OpenSession();
        var schools = documentSession.Query<School>().Where(x => x.SchoolName == "My Primary School").ToList();
        foreach (var school in schools)
        {
            Console.WriteLine(school);
        }

        schools = documentSession.Query<School>().Where(x => x.Id == "109940").ToList();
        foreach (var school in schools)
        {
            Console.WriteLine(school.SchoolName);  // returns My Primary School
        }

最初のクエリを実行すると、データベースに一致するレコードがありますが、レコードは返されません。ただし、2番目のクエリは私が期待しているレコードを返します。組み込みとしてデータベースを実行していますが、自分でインデックスを設定していません

更新:クエリをカスタマイズして、古くない結果を待つ場合は正常に機能しますが、永続的なインデックスを作成する必要がありますか?

4

1 に答える 1

1

これがRavenDBの動作です。クエリを満たすインデックスがない場合、RavenDBはクエリに応じて動的にインデックスを作成し、古い結果を返します。

これが、2回目に期待どおりの結果が得られる理由です。これはRavenDBの主要な設計の1つであり、インデックスがバックグラウンドで機能し、インデックスが古くなるまでクエリをブロックするのではなく、古くなった結果を許可します。

本番環境では、RavenDBがインデックスが定期的に使用されていることを検出すると、一時インデックスが自動インデックスに昇格します。自動インデックスを中継する代わりに、ある時点で静的インデックスを作成することもできます。

于 2012-07-23T05:56:56.570 に答える