SearchAsync

このメソッドは、入力データに類似したレコードをベクトル・ストアで検索します。

宣言

// C#
public async IAsyncEnumerable<VectorSearchResult<Dictionary<string, object?>>> SearchAsync<TInput>(TInput searchValue, int top, VectorSearchOptions<Dictionary<string, object?>>? options = null, CancellationToken cancellationToken = default) where TInput : notnull;

パラメータ

  • TInput

    類似検索を実行するための入力値のタイプ。

  • searchValue

    類似検索の入力値。詳細は、備考の項を参照してください。

  • top

    返される結果の最大数。

  • options

    検索動作を制御するオプション。

  • cancellationToken

    取消トークン。

戻り値

ベクトル検索で見つかったIAsyncEnumerable<VectorSearchResult<Dictionary<string, object?>>レコード(結果スコアを含む)。

実装

Microsoft.Extensions.VectorData.IVectorSearchable

例外

  • VectorStoreException: レコードがないこと以外の理由でコマンドの実行に失敗しました。
  • NotSupportedException: データベースが23ai以降のデータベースではないため、ベクトル・データ型がサポートされていません。

備考

searchValueパラメータでサポートされる型は、使用するプロバイダおよび構成されている埋込み生成によって異なります。

文字列またはDataContent(イメージ、サウンド用...) (適切なIEmbeddingGeneratorが、そのタイプを入力として受け入れるように構成されている場合)。たとえば、依存関係インジェクション・コンテナの入力として文字列を受け入れるIEmbeddingGeneratorを登録し、このメソッドに文字列引数を渡します。この引数がIEmbeddingGeneratorに自動的に渡されて、埋込みが生成されて検索が実行されます。

一部のデータベースでは、データベース側で埋込みの生成がサポートされています。この場合は、Microsoft.Extensions.VectorDataを使用してIEmbeddingGeneratorを構成しなくても、文字列またはDataContentを渡すことができます。プロバイダは、埋込み生成のためにデータベースに引数をそのまま送信するだけです。

適切なIEmbeddingGeneratorが構成されているかぎり、任意の.NETタイプを渡すこともできます。たとえば、独自のカスタム・タイプを入力として受け入れる独自のIEmbeddingGeneratorを作成し、別のIEmbeddingGeneratorを使用して複数のプロパティから埋込みを生成できます。

文字列およびDataContent以外の.NETタイプの場合、レコード定義で汎用のVectorStoreVectorPropertyを使用する必要があります。

埋込みを直接操作するには、コネクタが受け入れるベクトル・データ型の.NETデータ型を渡します。

IEmbeddingGeneratorをコードで直接使用している場合、その型は埋込み(Embeddingなど)を返します。その特定の埋込み型をプロバイダがサポートしているかぎり、これを直接渡すこともできます。ただし、かわりにIEmbeddingGeneratorをプロバイダに登録して入力タイプ(stringなど)を渡すことを検討してくださ。

OracleCollectionとは異なり、OracleDynamicColloectionTKeyとしてObjectを使用し、TRecordとしてDictionary<string, object?>を使用します。オプションに正しいパラメータ・タイプ(Dictionary<string, object?>)を使用してください。