-
Notifications
You must be signed in to change notification settings - Fork 3.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Gzip input data. Reformat code, replace space indents with tab indents. Convert readme to Asciidoc. See #690
- Loading branch information
Showing
5 changed files
with
300 additions
and
629,907 deletions.
There are no files selected for viewing
31 changes: 18 additions & 13 deletions
31
mongodb/fragment-spi/README.md → mongodb/fragment-spi/README.adoc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,35 +1,40 @@ | ||
# Spring Data - Fragment SPI Example | ||
= Spring Data - Fragment SPI Example | ||
|
||
This project contains a sample using `spring.factories` to register implementation details for a repository extension for MongoDB Vector Search that lives outside of the project namespace. | ||
This project contains a sample using `spring.factories` to register implementation details for a repository extension for MongoDB Vector Search that lives outside the project namespace. | ||
|
||
The project is divided into the `atlas-api`, providing the extension, and the `sample` using it. | ||
|
||
## atlas-api | ||
== atlas-api | ||
|
||
The `AtlasRepository` is the base interface containing a `vectorSearch` method that is implemented in `AtlasRepositoryFragment`. The configuration in `src/main/resources/META-INF/spring.factories` makes sure it is picked up by the spring data infrastructure. | ||
|
||
The implementation leverages `RepositoryMethodContext` to get hold of method invocation metadata to determine the collection name derived from the repositories domain type `<T>`. | ||
Since providing the metadata needs to be explicitly activated the `AtlasRepositoryFragment` uses the additional marker interface `RepositoryMetadataAccess` enabling the features for repositories extending the `AtlasRepository`. | ||
Since providing the metadata needs to be explicitly activated the `AtlasRepositoryFragment` uses the additional marker interface `RepositoryMetadataAccess` enabling the features for repositories extending the `AtlasRepository`. | ||
|
||
## sample | ||
== sample | ||
|
||
The `MovieRepository` extends the `AtlasRepository` from the api project using a `Movie` type targeting the `movies` collection. No further configuration is needed to use the provided `vectorSearch` within the `MovieRepositoryTests`. | ||
|
||
The `Movies` class in `src/main/test` takes care of setting up required test data and indexes. | ||
|
||
## Running the sample | ||
== Running the sample | ||
|
||
The is using a local MongoDB Atlas instance bootstrapped by Testcontainers. | ||
Running the `MovieRepositoryTests` the `test/movies` collection will be populated with about 400 entries from the `mflix.embedded_movies.json` file. | ||
Please be patient while data is loaded into the database and the index created afterwards. | ||
Running the `MovieRepositoryTests` the `test/movies` collection will be populated with about 400 entries from the `mflix.embedded_movies.json.gz` file. | ||
Please be patient while data is loaded into the database and the index created afterward. | ||
Progress information will be printed to the log. | ||
```log | ||
INFO - com.example.data.mongodb.Movies: 73 - Loading movies mflix.embedded_movies.json | ||
|
||
[source,log] | ||
---- | ||
INFO - com.example.data.mongodb.Movies: 73 - Loading movies from class path resource [mflix.embedded_movies.json.gz] | ||
INFO - com.example.data.mongodb.Movies: 90 - Created 420 movies in test.movies | ||
INFO - com.example.data.mongodb.Movies: 65 - creating vector index | ||
INFO - com.example.data.mongodb.Movies: 68 - index 'plot_vector_index' created | ||
``` | ||
---- | ||
|
||
Once data and index are available search result will be printed: | ||
```log | ||
|
||
[source,log] | ||
---- | ||
INFO - ...mongodb.MovieRepositoryTests: 183 - Movie{id='66d6ee0937e07b74aa2939cc', ... | ||
``` | ||
---- |
Oops, something went wrong.