From 74ae9ab8973da1ae21768841293464ae6d435959 Mon Sep 17 00:00:00 2001 From: Doris Lam Date: Mon, 23 Jun 2025 18:43:33 -0700 Subject: [PATCH] fix opensearch race condition, use keyword search instead of full text search in filter query --- backend/open_webui/retrieval/vector/dbs/opensearch.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/backend/open_webui/retrieval/vector/dbs/opensearch.py b/backend/open_webui/retrieval/vector/dbs/opensearch.py index 60ef2d906..7e16df3cf 100644 --- a/backend/open_webui/retrieval/vector/dbs/opensearch.py +++ b/backend/open_webui/retrieval/vector/dbs/opensearch.py @@ -157,10 +157,10 @@ class OpenSearchClient(VectorDBBase): for field, value in filter.items(): query_body["query"]["bool"]["filter"].append( - {"match": {"metadata." + str(field): value}} + {"term": {"metadata." + str(field) + ".keyword": value}} ) - size = limit if limit else 10 + size = limit if limit else 10000 try: result = self.client.search( @@ -206,6 +206,7 @@ class OpenSearchClient(VectorDBBase): for item in batch ] bulk(self.client, actions) + self.client.indices.refresh(self._get_index_name(collection_name)) def upsert(self, collection_name: str, items: list[VectorItem]): self._create_index_if_not_exists( @@ -228,6 +229,7 @@ class OpenSearchClient(VectorDBBase): for item in batch ] bulk(self.client, actions) + self.client.indices.refresh(self._get_index_name(collection_name)) def delete( self, @@ -251,11 +253,12 @@ class OpenSearchClient(VectorDBBase): } for field, value in filter.items(): query_body["query"]["bool"]["filter"].append( - {"match": {"metadata." + str(field): value}} + {"term": {"metadata." + str(field) + ".keyword": value}} ) self.client.delete_by_query( index=self._get_index_name(collection_name), body=query_body ) + self.client.indices.refresh(self._get_index_name(collection_name)) def reset(self): indices = self.client.indices.get(index=f"{self.index_prefix}_*")