Skip to content

Commit

Permalink
Polishing.
Browse files Browse the repository at this point in the history
Gzip input data. Reformat code, replace space indents with tab indents. Convert readme to Asciidoc.

See #690
  • Loading branch information
mp911de committed Nov 22, 2024
1 parent 8d0bde0 commit e60ab89
Show file tree
Hide file tree
Showing 5 changed files with 300 additions and 629,907 deletions.
31 changes: 18 additions & 13 deletions mongodb/fragment-spi/README.md → mongodb/fragment-spi/README.adoc
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', ...
```
----
Loading

0 comments on commit e60ab89

Please sign in to comment.