Vind (faɪnd) is a modular Java library which aims to lower the hurdle of integrating information discovery facilities in Java projects. It should help programmers to come to a good solution in an assessable amount of time, improve the maintainability of software projects, and simplify a centralized information discovery service management including monitoring and reporting.
In Vind we try to design an API which follows this 3 design principles:
1. Versatility: Vind will be used in many different projects, so it was an aim to keeping the dependency footprint small, which avoids version-clashes in the downstream projects.
2. Backend Agnostic: Wherever possible and feasible, the library has to abstracted from the basic search framework. This enabled us to change the backend without migrating application software.
3. Flat learning curve: It was an aim to keep the learning curve rather flat, so we tried to use Java built-in constructs whenever possible. Additionally we tried to follow the concept: easy things should be easy, complex things can (but does not have to) be complex.
The search lib is modular and currently implements the following layers:
Each Vind release is labeled in the repository with a tag fitting the following schema: vind-va.b.c where vind-v just points out that this belongs to a Vind version and a.b.c represents the release number, also used for the artifact version. Prior to vind-v1.3.0 there was not a clear policy on versioning.
From 1.3.0 on releases will strictly stick to the following diagram:
Regarding the release process, prior to every non hot fix release, a release candidate would be published to be tested on an staging environment as close as possible to production. These releases will apply the previous described name schema followed by RCa suffix, being a the release candidate iteration number. I.e., vind-v1.3.0-RC1 would be the first release candidate for version 1.2.6 which, if rejected due to bugs found in staging environment, will be released again after fixing as vind-v1.3.0-RC2. After approval, the artifact will be released as vind-v1.3.0.
From vind-v1.3.0, all the hot fixes will be handle in a release specific maintenance branch, that means development branch should always be in an a.b.0-SNAPSHOT Vind version.
If you'd like to get a deeper look into the lib or if you are interested in our future goals just have a look at our blog series. There we give an outlook on the next development steps and introduce new features.
The modules of the Vind lib are provided as Maven artifacts and thus can be seamlessly integrated in new and existing Java Software projects. Vind decouples API and the real indexing components. The first backend which is also the reference implementation is build on top of Apache Solr. The lib integrates an in-memory indexer on top of an Embedded Solr Server which enables developers to start without setting up a complex infrastructure. Furthermore Vind includes a backend maintainance component which makes it easy to setup Vind index collections and keep them in sync with the Vind version.
Vind is an Open Source project so everyone is encouraged to improve it. Don't hesitate to report bugs, provide fixes or share new ideas with us. We have various ways for contribution:
Snapshot: Pushes to branch
develop are automatically deployed to sonatype snapshots.
Release: Stable releases need to be performed manually:
(cd target/checkout; mvn nexus-staging:release)
git push && git push --tags
Free use of this software is granted under the terms of the Apache License Version 2.0. See the License for more details.
Vind is lead by Red Bull Media House Technology and was initiated in 2017.
The Changelog provides a complete list of changes in older releases.