最新の安定バージョンについては、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);

}