|
6 | 6 | from ravendb.documents.indexes.vector.embedding import VectorEmbeddingType
|
7 | 7 | from ravendb.documents.indexes.vector.options import VectorOptions
|
8 | 8 | from ravendb.documents.operations.server_misc import ToggleDatabasesStateOperation
|
| 9 | +from ravendb.infrastructure.orders import Product |
9 | 10 | from ravendb.tests.test_base import TestBase
|
10 | 11 |
|
11 | 12 |
|
@@ -210,3 +211,78 @@ def test_auto_index_creation_with_exact_search(self):
|
210 | 211 |
|
211 | 212 | self.assertEqual(1, len(index_definitions))
|
212 | 213 | self.assertEqual("Auto/Dtoes/ByVector.search(embedding_sinlges)", index_definitions[0].name)
|
| 214 | + |
| 215 | + def test_auto_index_creation_with_exact_search_quantized_binary(self): |
| 216 | + with self.store.open_session() as session: |
| 217 | + dto1 = Dto(embedding_binary=[0, 1, 0]) |
| 218 | + dto2 = Dto(embedding_binary=[0, 0, 1]) |
| 219 | + queried_embedding = [1, 1, 0] |
| 220 | + session.store(dto1) |
| 221 | + session.store(dto2) |
| 222 | + session.save_changes() |
| 223 | + |
| 224 | + results = list( |
| 225 | + session.query(object_type=Dto) |
| 226 | + .vector_search_i1("embedding_binary", queried_embedding, is_exact=True) |
| 227 | + .order_by_score() |
| 228 | + ) |
| 229 | + |
| 230 | + self.assertEqual(2, len(results)) |
| 231 | + self.assertEqual([0, 1, 0], results[0].embedding_binary) |
| 232 | + |
| 233 | + index_definitions = self.store.maintenance.send(GetIndexesOperation(0, 10)) |
| 234 | + |
| 235 | + self.assertEqual(1, len(index_definitions)) |
| 236 | + self.assertEqual("Auto/Dtoes/ByVector.search(embedding.i1(embedding_binary))", index_definitions[0].name) |
| 237 | + |
| 238 | + def test_auto_index_creation_with_exact_search_quantized_int8(self): |
| 239 | + with self.store.open_session() as session: |
| 240 | + dto1 = Dto(embedding_sbytes=[64, -127, 0, 0, -128, 63]) |
| 241 | + dto2 = Dto(embedding_sbytes=[91, 127, 51, 51, 51, 63]) |
| 242 | + queried_embedding = [78, 0, 43, 43, 0, 63] |
| 243 | + session.store(dto1) |
| 244 | + session.store(dto2) |
| 245 | + session.save_changes() |
| 246 | + |
| 247 | + results = list( |
| 248 | + session.query(object_type=Dto) |
| 249 | + .vector_search_i8("embedding_sbytes", queried_embedding, minimum_similarity=0) |
| 250 | + .order_by_score() |
| 251 | + ) |
| 252 | + |
| 253 | + self.assertEqual(2, len(results)) |
| 254 | + self.assertEqual([91, 127, 51, 51, 51, 63], results[0].embedding_sbytes) |
| 255 | + |
| 256 | + index_definitions = self.store.maintenance.send(GetIndexesOperation(0, 10)) |
| 257 | + |
| 258 | + self.assertEqual(1, len(index_definitions)) |
| 259 | + self.assertEqual("Auto/Dtoes/ByVector.search(embedding.i8(embedding_sbytes))", index_definitions[0].name) |
| 260 | + |
| 261 | + def test_auto_index_creation_with_exact_search_text(self): |
| 262 | + with self.store.open_session() as session: |
| 263 | + session.store(Product(name="Bicycle")) |
| 264 | + session.store(Product(name="Paddle")) |
| 265 | + session.store(Product(name="Sea")) |
| 266 | + session.store(Product(name="Sailors")) |
| 267 | + session.store(Product(name="Oblivion")) |
| 268 | + session.save_changes() |
| 269 | + |
| 270 | + results = list(session.query(object_type=Product).vector_search_text("name", "sea").order_by_score()) |
| 271 | + self.assertEqual(3, len(results)) |
| 272 | + self.assertEqual("Sea", results[0].name) |
| 273 | + self.assertEqual("Sailors", results[1].name) |
| 274 | + self.assertEqual("Paddle", results[2].name) |
| 275 | + |
| 276 | + session.store(Product(name="Scott Steiner")) |
| 277 | + session.save_changes() |
| 278 | + |
| 279 | + results = list( |
| 280 | + session.query(object_type=Product) |
| 281 | + .vector_search_text("name", "sea", minimum_similarity=0.75) |
| 282 | + .order_by_score() |
| 283 | + ) |
| 284 | + self.assertEqual(4, len(results)) |
| 285 | + self.assertEqual("Sea", results[0].name) |
| 286 | + self.assertEqual("Sailors", results[1].name) |
| 287 | + self.assertEqual("Paddle", results[2].name) |
| 288 | + self.assertEqual("Scott Steiner", results[3].name) |
0 commit comments