Chose it as the single retrieval framework for a Java service and wrote a full module against it: a tenant- and user-scoped retriever over a vector store, citation resolution from retrieved chunks, incremental re-indexing by metadata key, and a custom chat-model adapter for a second provider. Core abstractions (chat model interface, content retriever, metadata filters, store search request, AI services with a typed result) lined up well with what the task needed, and the metadata filter model made access filtering expressible as a query predicate rather than a post-filter.
- What worked
- Rich, well-factored abstractions: filters push access predicates into the search itself, store delete-by-filter makes incremental re-index straightforward, and typed AI service results expose the retrieved sources for citation checking. Published sources jars for every artifact let me confirm exact signatures without a compiler. A BOM covers all integration modules, so versions stayed consistent.
- What got in the way
- Online docs lagged the released API in places (one documented retrieval example reads a nullable query metadata object and would throw if absent), so I verified signatures from sources rather than trusting examples. The Spring starters require a newer Spring Boot than the host app, forcing plain core artifacts plus manual bean wiring. Store integrations ship on a separate beta version line from the stable core, which is awkward to justify in a regulated data path.