Bug Fix

Correct Parameter Type for KnnSearch$Builder.k Method in ElasticsearchVectorStore.java

Description

This PR addresses a bug in ElasticsearchVectorStore.java where an incorrect parameter type was passed to the KnnSearch$Builder.k method of the ElasticSearchClient during the execution of similaritySearch. The issue caused the following error:

Handler dispatch failed: java.lang.NoSuchMethodError: 'co.elastic.clients.elasticsearch._types.KnnSearch$Builder co.elastic.clients.elasticsearch._types.KnnSearch$Builder.k(java.lang.Long)'

Root Cause

The KnnSearch$Builder.k method in elasticsearch-rest-client:8.15.4 requires an Integer parameter, but the code passed a long value, leading to the NoSuchMethodError.

SearchResponse<Document> res = this.elasticsearchClient.search(
                    sr -> sr.index(this.options.getIndexName())
                        .knn(knn -> knn.queryVector(EmbeddingUtils.toList(vectors))
                            .similarity(finalThreshold)
                            .k((long) searchRequest.getTopK())
                            .field("embedding")
                            .numCandidates((long) (1.5 * searchRequest.getTopK()))
                            .filter(fl -> fl.queryString(
                                    qs -> qs.query(getElasticsearchQueryString(searchRequest.getFilterExpression()))))),
                    Document.class);

Fix

The fix involves changing the parameter type from long to Integer when calling the KnnSearch$Builder.k method.

Changes

Updated ElasticsearchVectorStore.java to pass an Integer parameter to the KnnSearch$Builder.k method.