Elasticsearch
Maven Dependency
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-elasticsearch</artifactId>
<version>0.35.0</version>
</dependency>
APIs
The ElasticsearchEmbeddingStore
comes with 2 implementations:
- Using approximate kNN queries
with the
ElasticsearchConfigurationKnn
configuration class (default). - Using scriptScore queries
with the
ElasticsearchConfigurationScript
configuration class. Note that this implementation is using cosine similarity.
Common options
To create the ElasticsearchEmbeddingStore
instance, you need to provide an Elasticsearch
RestClient
:
String apiKey = "VnVhQ2ZHY0JDZGJrU...";
RestClient restClient = RestClient
.builder(HttpHost.create("https://localhost:9200"))
.setDefaultHeaders(new Header[]{
new BasicHeader("Authorization", "ApiKey " + apiKey)
})
.build();
Note:
See the Elasticsearch documentation on how to create a RestClient instance.
Then you can create the embedding store. It uses the approximate kNN query implementation by default.
ElasticsearchEmbeddingStore store = ElasticsearchEmbeddingStore.builder()
.restClient(restClient)
.build();
ElasticsearchConfigurationKnn configuration (default)
The previous is equivalent to:
ElasticsearchEmbeddingStore store = ElasticsearchEmbeddingStore.builder()
.configuration(ElasticsearchConfigurationKnn.builder().build())
.restClient(restClient)
.build();
ElasticsearchConfigurationScript configuration
If you want to use the previous, but slower behavior, you can use the ElasticsearchConfigurationScript
configuration class:
ElasticsearchEmbeddingStore store = ElasticsearchEmbeddingStore.builder()
.configuration(ElasticsearchConfigurationScript.builder().build())
.restClient(restClient)
.build();