From d21dd6f74d1ef03aec0ac55f46024f06923db7f5 Mon Sep 17 00:00:00 2001 From: Laurens Tsestigh <90600075+LaurensTsestigh@users.noreply.github.com> Date: Thu, 29 Aug 2024 10:11:51 +0200 Subject: [PATCH 1/2] fix --- libs/langchain-community/src/vectorstores/elasticsearch.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/libs/langchain-community/src/vectorstores/elasticsearch.ts b/libs/langchain-community/src/vectorstores/elasticsearch.ts index 14a4ee12ac03..edc29c4260ef 100644 --- a/libs/langchain-community/src/vectorstores/elasticsearch.ts +++ b/libs/langchain-community/src/vectorstores/elasticsearch.ts @@ -343,10 +343,9 @@ export class ElasticVectorSearch extends VectorStore { }, }); } else if (condition.operator === "exclude") { + const toExclude = { [metadataField]: condition.value } must_not.push({ - term: { - [metadataField]: condition.value, - }, + ...(Array.isArray(condition.value) ? { terms: toExclude } : { term: toExclude }) }); } else if (condition.operator === "or") { should.push({ From 45cd6e4e68e1e23a9e65c213df618ef31a86602a Mon Sep 17 00:00:00 2001 From: jacoblee93 Date: Wed, 4 Sep 2024 11:47:57 -0700 Subject: [PATCH 2/2] Adds integration test --- .../langchain-community/src/vectorstores/elasticsearch.ts | 6 ++++-- .../src/vectorstores/tests/elasticsearch.int.test.ts | 8 ++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/libs/langchain-community/src/vectorstores/elasticsearch.ts b/libs/langchain-community/src/vectorstores/elasticsearch.ts index edc29c4260ef..cccc439bb7a9 100644 --- a/libs/langchain-community/src/vectorstores/elasticsearch.ts +++ b/libs/langchain-community/src/vectorstores/elasticsearch.ts @@ -343,9 +343,11 @@ export class ElasticVectorSearch extends VectorStore { }, }); } else if (condition.operator === "exclude") { - const toExclude = { [metadataField]: condition.value } + const toExclude = { [metadataField]: condition.value }; must_not.push({ - ...(Array.isArray(condition.value) ? { terms: toExclude } : { term: toExclude }) + ...(Array.isArray(condition.value) + ? { terms: toExclude } + : { term: toExclude }), }); } else if (condition.operator === "or") { should.push({ diff --git a/libs/langchain-community/src/vectorstores/tests/elasticsearch.int.test.ts b/libs/langchain-community/src/vectorstores/tests/elasticsearch.int.test.ts index 08ec39ac0f57..41045196892a 100644 --- a/libs/langchain-community/src/vectorstores/tests/elasticsearch.int.test.ts +++ b/libs/langchain-community/src/vectorstores/tests/elasticsearch.int.test.ts @@ -114,6 +114,14 @@ describe("ElasticVectorSearch", () => { }, ]); expect(results2).toHaveLength(1); + const results3 = await store.similaritySearch("*", 11, [ + { + field: "a", + value: [createdAt], + operator: "exclude", + }, + ]); + expect(results3).toHaveLength(1); }); test.skip("ElasticVectorSearch integration with text splitting metadata", async () => {