多くの実験の後、答えは非常に単純であることがわかりましたが、明らかではありません。
public void Clear<T>()
{
session.Advanced.DocumentStore.DatabaseCommands.PutIndex(indexName, new IndexDefinitionBuilder<T>
{
Map = documents => documents.Select(entity => new {})
});
session.Advanced.DatabaseCommands.DeleteByIndex(indexName, new IndexQuery());
}
もちろん、ほとんどの場合、インデックスの定義と削除を一度に行うことはありません。簡潔にするために、これを 1 つのメソッドとして示しました。
私自身の実装では、ドキュメントで推奨されているように、アプリケーションの開始時にインデックスを定義しています。
このアプローチを使用して T のプロパティを実際にインデックス付けする場合は、T を制約する必要があります。たとえば、すべてのドキュメント クラスが継承する IEntity があり、このクラスがプロパティ ID を指定するとします。次に、「where T : IEntity」を使用すると、そのプロパティをインデックスで使用できます。
他の場所でも言われていますが、Raven がおそらくそれを使用する静的インデックスを定義すると、クエリが挿入したデータを返さないように見える可能性があることにも注意してください。
RavenDB ディスククエリへの保存