存在を確認する必要はありません。サーバーは、送信した索引定義を自動的に比較し、すでに存在するかどうかを確認します。同じ名前と定義を持つものが存在する場合は、そのまま残されます。同じ名前のオブジェクトが存在し、定義が変更されている場合は、古いオブジェクトが削除され、新しいオブジェクトが作成されます。
通常、アプリケーションの起動時に同じアプリケーションでインデックスを作成します。 global.asaxにある可能性のあるWebアプリケーションや、コンソール/デスクトップアプリケーションでは、起動コードの最初の部分にすぎません。
しかし、マルチテナントアプリケーションのように、多くのデータベースがある場合など、それは不可能なことがあります。そのような場合は、各テナントデータベースを作成するときにインデックスを作成し、バージョンアップグレードを展開するときにインデックスを更新または作成する必要があります。
また、インデックスを作成するにはいくつかの方法があります。
// scans the assembly for all indexes and creates them
IndexCreation.CreateIndexes(assembly, documentStore);
// scans a MEF catalog for all indexes and creates them
IndexCreation.CreateIndexes(catalog, documentStore);
// puts a single index the HARD way
documentStore.DatabaseCommands.PutIndex(...);
// puts a single index the easy way
documentStore.ExecuteIndex(new YourIndexCreationTask());
他にもいくつかありますが、あなたはそのアイデアを得ています。
そして、あなたは本当にがはあなたが使用することができ、インデックスexistanceをチェックしたいなかった場合だけ、徹底すべき:
documentStore.DatabaseCommands.GetIndex("YourIndex") != null
しかし、それは唯一の名前ではなく、定義によってチェックされます。そしてあなたはそれを必要としません。
これはあなたの質問に答えることはできませんが、RavenDBが自動的にインデックスを作成することに言及する価値があると感じました。 [このRavenDBのドキュメントページ](http://ravendb.net/docs/client-api/querying)、特に動的インデックスに関する部分を参照してください。 – ean5533
@ ean5533 - 動的インデックスに適用されます(yes)。私はOPが静止インデックスの作成に関心があると思う。説明のために –