最新の安定バージョンについては、Spring Data Neo4j 8.1.0 を使用してください! |
Neo4j ベクトル検索
@VectorSearch アノテーション
Spring Data Neo4j は、@VectorSearch アノテーションを使用して、リポジトリレベルでの Neo4j のベクトル検索をサポートしています。これを動作させるには、Neo4j にベクトルインデックスが設定されている必要があります。ベクトルインデックスの作成方法については、Neo4j ドキュメント (英語) で説明されています。
| 検索はインデックスに対してのみ実行されるため、これを機能させるためにドメインエンティティに (Spring Data) ベクトル型のプロパティを定義する必要はありません。 |
@VectorSearch アノテーションには、使用するベクトルインデックスの名前と最近傍の数という 2 つの引数が必要です。
ドメイン全体にわたる一般的なベクトル検索では、プロパティのない派生ファインダーメソッドを使用できます。
interface VectorSearchRepository extends Neo4jRepository<EntityWithVector, String> {
@VectorSearch(indexName = "entityIndex", numberOfNodes = 2)
List<EntityWithVector> findBy(Vector searchVector);
}ベクトルインデックスを任意のプロパティベースの検索メソッドと組み合わせて、結果を絞り込むことができます。
| 技術的な理由により、プロパティ検索が呼び出される前に、ベクトル検索が常に実行されます。たとえば、プロパティフィルターで "Helge" という名前の人物を検索したのに、ベクトル検索で "Hannes" しか返されなかった場合、結果は表示されません。 |
interface VectorSearchRepository extends Neo4jRepository<EntityWithVector, String> {
@VectorSearch(indexName = "entityIndex", numberOfNodes = 1)
List<EntityWithVector> findByName(String name, Vector searchVector);
}