|
1 |
| -# Spring Data - Fragment SPI Example |
| 1 | += Spring Data - Fragment SPI Example |
2 | 2 |
|
3 |
| -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. |
| 3 | +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. |
4 | 4 |
|
5 | 5 | The project is divided into the `atlas-api`, providing the extension, and the `sample` using it.
|
6 | 6 |
|
7 |
| -## atlas-api |
| 7 | +== atlas-api |
8 | 8 |
|
9 | 9 | 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.
|
10 | 10 |
|
11 | 11 | The implementation leverages `RepositoryMethodContext` to get hold of method invocation metadata to determine the collection name derived from the repositories domain type `<T>`.
|
12 |
| -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`. |
| 12 | +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`. |
13 | 13 |
|
14 |
| -## sample |
| 14 | +== sample |
15 | 15 |
|
16 | 16 | 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`.
|
17 | 17 |
|
18 | 18 | The `Movies` class in `src/main/test` takes care of setting up required test data and indexes.
|
19 | 19 |
|
20 |
| -## Running the sample |
| 20 | +== Running the sample |
21 | 21 |
|
22 | 22 | The is using a local MongoDB Atlas instance bootstrapped by Testcontainers.
|
23 |
| -Running the `MovieRepositoryTests` the `test/movies` collection will be populated with about 400 entries from the `mflix.embedded_movies.json` file. |
24 |
| -Please be patient while data is loaded into the database and the index created afterwards. |
| 23 | +Running the `MovieRepositoryTests` the `test/movies` collection will be populated with about 400 entries from the `mflix.embedded_movies.json.gz` file. |
| 24 | +Please be patient while data is loaded into the database and the index created afterward. |
25 | 25 | Progress information will be printed to the log.
|
26 |
| -```log |
27 |
| -INFO - com.example.data.mongodb.Movies: 73 - Loading movies mflix.embedded_movies.json |
| 26 | + |
| 27 | +[source,log] |
| 28 | +---- |
| 29 | +INFO - com.example.data.mongodb.Movies: 73 - Loading movies from class path resource [mflix.embedded_movies.json.gz] |
28 | 30 | INFO - com.example.data.mongodb.Movies: 90 - Created 420 movies in test.movies
|
29 | 31 | INFO - com.example.data.mongodb.Movies: 65 - creating vector index
|
30 | 32 | INFO - com.example.data.mongodb.Movies: 68 - index 'plot_vector_index' created
|
31 |
| -``` |
| 33 | +---- |
| 34 | + |
32 | 35 | Once data and index are available search result will be printed:
|
33 |
| -```log |
| 36 | + |
| 37 | +[source,log] |
| 38 | +---- |
34 | 39 | INFO - ...mongodb.MovieRepositoryTests: 183 - Movie{id='66d6ee0937e07b74aa2939cc', ...
|
35 |
| -``` |
| 40 | +---- |
0 commit comments