Skip to main content

OpenSearch

https://opensearch.org/

Maven Dependency

<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-opensearch</artifactId>
<version>1.10.0-beta18</version>
</dependency>

APIs

The OpenSearchEmbeddingStore uses exact k-NN with scoring script implementation for similarity search. See OpenSearch k-NN documentation for more details.

Features

  • Metadata filtering: Supports filtering search results by metadata using the Filter API
  • Removal operations:
    • Remove embeddings by ID
    • Remove embeddings by metadata filter
    • Remove all embeddings (drops the index)
  • AWS Support: Native support for Amazon OpenSearch Service and Amazon OpenSearch Serverless

Basic Usage

To create the OpenSearchEmbeddingStore instance for local or network-reachable OpenSearch:

OpenSearchEmbeddingStore store = OpenSearchEmbeddingStore.builder()
.serverUrl("http://localhost:9200")
.indexName("my-embeddings")
.build();

With authentication:

OpenSearchEmbeddingStore store = OpenSearchEmbeddingStore.builder()
.serverUrl("https://my-opensearch.example.com:9200")
.userName("admin")
.password("admin")
.indexName("my-embeddings")
.build();

AWS OpenSearch

For Amazon OpenSearch Service or OpenSearch Serverless:

AwsSdk2TransportOptions options = AwsSdk2TransportOptions.builder()
.setCredentials(DefaultCredentialsProvider.create())
.build();

OpenSearchEmbeddingStore store = OpenSearchEmbeddingStore.builder()
.serverUrl("https://search-domain.us-east-1.es.amazonaws.com")
.serviceName("es") // or "aoss" for Serverless
.region("us-east-1")
.options(options)
.indexName("my-embeddings")
.build();

Metadata Filtering

Filter search results by metadata:

Filter filter = metadataKey("category").isEqualTo("documentation");

EmbeddingSearchRequest searchRequest = EmbeddingSearchRequest.builder()
.queryEmbedding(queryEmbedding)
.filter(filter)
.maxResults(10)
.build();

EmbeddingSearchResult<TextSegment> result = store.search(searchRequest);

Supported filter operations:

  • Comparison: isEqualTo, isNotEqualTo, isGreaterThan, isGreaterThanOrEqualTo, isLessThan, isLessThanOrEqualTo
  • Collection: isIn, isNotIn
  • Logical: and, or, not

Removal Operations

Remove embeddings by ID:

store.removeAll(List.of("id1", "id2", "id3"));

Remove embeddings by metadata filter:

Filter filter = metadataKey("status").isEqualTo("archived");
store.removeAll(filter);

Remove all embeddings (drops the index):

store.removeAll();

Examples