JNI libraries

To integrate nmslib’s and faiss’s Approximate k-NN functionality (implemented in C++) into the k-NN plugin (implemented in Java), we created a Java Native Interface, which lets the k-NN plugin make calls to the native libraries. To implement this, we create 3 libraries: libopensearchknn_nmslib, the JNI library that interfaces with nmslib, libopensearchknn_faiss, the JNI library that interfaces with faiss, and libopensearchknn_common, a library containing common shared functionality between native libraries.

The libraries libopensearchknn_faiss and libopensearchknn_nmslib are lazily loaded when they are first called in the plugin. This means that if you are only planning on using one of the libraries, the other one will never be loaded.

For building the libraries from source, please refer to the DEVELOPER_GUIDE.

For more information about JNI, see Java Native Interface on Wikipedia.