|
383 | 383 | ] |
384 | 384 | } |
385 | 385 | ] |
| 386 | + }, |
| 387 | + "vector_hybrid_100k.csv": { |
| 388 | + "doc_count": 100000, |
| 389 | + "fields": [ |
| 390 | + { |
| 391 | + "name": "title", |
| 392 | + "size": 50, |
| 393 | + "transforms": [ |
| 394 | + { |
| 395 | + "type": "proximity_phrase", |
| 396 | + "term_count": 1, |
| 397 | + "combinations": 1, |
| 398 | + "repeats": 1000 |
| 399 | + } |
| 400 | + ] |
| 401 | + }, |
| 402 | + { |
| 403 | + "name": "price", |
| 404 | + "size": 10, |
| 405 | + "transforms": [ |
| 406 | + { |
| 407 | + "type": "numeric_range", |
| 408 | + "min": 10, |
| 409 | + "max": 1000 |
| 410 | + } |
| 411 | + ] |
| 412 | + }, |
| 413 | + { |
| 414 | + "name": "category", |
| 415 | + "size": 30, |
| 416 | + "transforms": [ |
| 417 | + { |
| 418 | + "type": "tag_list", |
| 419 | + "tags": [ |
| 420 | + "electronics", |
| 421 | + "books", |
| 422 | + "clothing", |
| 423 | + "food", |
| 424 | + "sports" |
| 425 | + ] |
| 426 | + } |
| 427 | + ] |
| 428 | + }, |
| 429 | + { |
| 430 | + "name": "embedding", |
| 431 | + "size": 1, |
| 432 | + "transforms": [ |
| 433 | + { |
| 434 | + "type": "vector", |
| 435 | + "dimensions": 256 |
| 436 | + } |
| 437 | + ] |
| 438 | + } |
| 439 | + ] |
386 | 440 | } |
387 | 441 | }, |
388 | 442 | "query_generation": { |
|
418 | 472 | "min_word_length": 8, |
419 | 473 | "max_word_length": 10, |
420 | 474 | "target_distance": 3 |
| 475 | + }, |
| 476 | + "vector_queries_100.csv": { |
| 477 | + "type": "vector", |
| 478 | + "doc_count": 100, |
| 479 | + "dimensions": 256 |
421 | 480 | } |
422 | 481 | }, |
423 | 482 | "test_groups": [ |
|
638 | 697 | "clients": 88 |
639 | 698 | } |
640 | 699 | ] |
| 700 | + }, |
| 701 | + { |
| 702 | + "id": "k", |
| 703 | + "type": "read", |
| 704 | + "cluster_execution": "parallel", |
| 705 | + "description": "Pure negation - exclude term from all fields", |
| 706 | + "dataset": "datasets/proximity_phrases.csv", |
| 707 | + "clients": 1000, |
| 708 | + "duration": 200, |
| 709 | + "warmup": 60, |
| 710 | + "command": "FT.SEARCH rd0 \"-__field:term2__\"", |
| 711 | + "options": { |
| 712 | + "": "", |
| 713 | + "NOCONTENT": "_nocontent" |
| 714 | + } |
641 | 715 | } |
642 | 716 | ] |
643 | 717 | }, |
|
1073 | 1147 | "delays": { |
1074 | 1148 | "write": { |
1075 | 1149 | "delay": 5, |
1076 | | - "duration": 30 |
| 1150 | + "duration": 10 |
1077 | 1151 | } |
1078 | 1152 | } |
1079 | 1153 | } |
|
1097 | 1171 | "delays": { |
1098 | 1172 | "write": { |
1099 | 1173 | "delay": 5, |
1100 | | - "duration": 15 |
| 1174 | + "duration": 10 |
1101 | 1175 | } |
1102 | 1176 | } |
1103 | 1177 | } |
|
1114 | 1188 | "dataset": "datasets/wiki_10k_50field_1ktok.csv", |
1115 | 1189 | "duration": 200, |
1116 | 1190 | "keyspacelen": 10000, |
1117 | | - "clients": 500, |
| 1191 | + "clients": 1000, |
1118 | 1192 | "sequential": true, |
1119 | 1193 | "command": "HSET rd0-{tag}:__rand_int__ field1 \"__field:field1__\" field2 \"__field:field2__\" field3 \"__field:field3__\" field4 \"__field:field4__\" field5 \"__field:field5__\" field6 \"__field:field6__\" field7 \"__field:field7__\" field8 \"__field:field8__\" field9 \"__field:field9__\" field10 \"__field:field10__\" field11 \"__field:field11__\" field12 \"__field:field12__\" field13 \"__field:field13__\" field14 \"__field:field14__\" field15 \"__field:field15__\" field16 \"__field:field16__\" field17 \"__field:field17__\" field18 \"__field:field18__\" field19 \"__field:field19__\" field20 \"__field:field20__\" field21 \"__field:field21__\" field22 \"__field:field22__\" field23 \"__field:field23__\" field24 \"__field:field24__\" field25 \"__field:field25__\" field26 \"__field:field26__\" field27 \"__field:field27__\" field28 \"__field:field28__\" field29 \"__field:field29__\" field30 \"__field:field30__\" field31 \"__field:field31__\" field32 \"__field:field32__\" field33 \"__field:field33__\" field34 \"__field:field34__\" field35 \"__field:field35__\" field36 \"__field:field36__\" field37 \"__field:field37__\" field38 \"__field:field38__\" field39 \"__field:field39__\" field40 \"__field:field40__\" field41 \"__field:field41__\" field42 \"__field:field42__\" field43 \"__field:field43__\" field44 \"__field:field44__\" field45 \"__field:field45__\" field46 \"__field:field46__\" field47 \"__field:field47__\" field48 \"__field:field48__\" field49 \"__field:field49__\" field50 \"__field:field50__\"", |
1120 | 1194 | "profiling": { |
1121 | 1195 | "delays": { |
1122 | 1196 | "write": { |
1123 | 1197 | "delay": 5, |
1124 | | - "duration": 15 |
| 1198 | + "duration": 10 |
1125 | 1199 | } |
1126 | 1200 | } |
1127 | 1201 | } |
|
1146 | 1220 | "delays": { |
1147 | 1221 | "write": { |
1148 | 1222 | "delay": 30, |
1149 | | - "duration": 60 |
| 1223 | + "duration": 10 |
1150 | 1224 | } |
1151 | 1225 | } |
1152 | 1226 | } |
|
1163 | 1237 | "dataset": "datasets/random_set_100k_20field_10tok.csv", |
1164 | 1238 | "duration": 200, |
1165 | 1239 | "keyspacelen": 100000, |
1166 | | - "clients": 500, |
| 1240 | + "clients": 1000, |
1167 | 1241 | "sequential": true, |
1168 | 1242 | "command": "HSET rd0-{tag}:__rand_int__ field1 \"__field:field1__\" field2 \"__field:field2__\" field3 \"__field:field3__\" field4 \"__field:field4__\" field5 \"__field:field5__\" field6 \"__field:field6__\" field7 \"__field:field7__\" field8 \"__field:field8__\" field9 \"__field:field9__\" field10 \"__field:field10__\" field11 \"__field:field11__\" field12 \"__field:field12__\" field13 \"__field:field13__\" field14 \"__field:field14__\" field15 \"__field:field15__\" field16 \"__field:field16__\" field17 \"__field:field17__\" field18 \"__field:field18__\" field19 \"__field:field19__\" field20 \"__field:field20__\"", |
1169 | 1243 | "profiling": { |
1170 | 1244 | "delays": { |
1171 | 1245 | "write": { |
1172 | 1246 | "delay": 5, |
1173 | | - "duration": 15 |
| 1247 | + "duration": 10 |
1174 | 1248 | } |
1175 | 1249 | } |
1176 | 1250 | } |
|
1199 | 1273 | "delays": { |
1200 | 1274 | "write": { |
1201 | 1275 | "delay": 5, |
1202 | | - "duration": 30 |
| 1276 | + "duration": 10 |
1203 | 1277 | } |
1204 | 1278 | } |
1205 | 1279 | } |
|
1216 | 1290 | "dataset": "datasets/radix_uuid_10k_1ktok.csv", |
1217 | 1291 | "duration": 200, |
1218 | 1292 | "keyspacelen": 10000, |
1219 | | - "clients": 500, |
| 1293 | + "clients": 1000, |
1220 | 1294 | "sequential": true, |
1221 | 1295 | "command": "HSET rd0-{tag}:__rand_int__ field1 \"__field:field1__\"", |
1222 | 1296 | "profiling": { |
1223 | 1297 | "delays": { |
1224 | 1298 | "write": { |
1225 | 1299 | "delay": 5, |
1226 | | - "duration": 15 |
| 1300 | + "duration": 10 |
1227 | 1301 | } |
1228 | 1302 | } |
1229 | 1303 | } |
|
1240 | 1314 | "dataset": "datasets/radix_progressive_10k_1ktok.csv", |
1241 | 1315 | "duration": 200, |
1242 | 1316 | "keyspacelen": 10000, |
1243 | | - "clients": 500, |
| 1317 | + "clients": 1000, |
1244 | 1318 | "sequential": true, |
1245 | 1319 | "command": "HSET rd0-{tag}:__rand_int__ field1 \"__field:field1__\"", |
1246 | 1320 | "profiling": { |
1247 | 1321 | "delays": { |
1248 | 1322 | "write": { |
1249 | 1323 | "delay": 5, |
1250 | | - "duration": 15 |
| 1324 | + "duration": 10 |
1251 | 1325 | } |
1252 | 1326 | } |
1253 | 1327 | } |
|
1271 | 1345 | "xml_root_element": "doc", |
1272 | 1346 | "duration": 200, |
1273 | 1347 | "keyspacelen": 100000, |
1274 | | - "clients": 500, |
| 1348 | + "clients": 1000, |
1275 | 1349 | "sequential": true, |
1276 | 1350 | "command": "HSET __field:keyname__ field1 \"__field:field1__\"", |
1277 | 1351 | "profiling": { |
1278 | 1352 | "delays": { |
1279 | 1353 | "write": { |
1280 | 1354 | "delay": 5, |
1281 | | - "duration": 15 |
| 1355 | + "duration": 10 |
1282 | 1356 | } |
1283 | 1357 | } |
1284 | 1358 | } |
|
1296 | 1370 | "xml_root_element": "doc", |
1297 | 1371 | "duration": 200, |
1298 | 1372 | "keyspacelen": 50000, |
1299 | | - "clients": 500, |
| 1373 | + "clients": 1000, |
1300 | 1374 | "sequential": true, |
1301 | 1375 | "command": "HSET rd0-{tag}:__rand_int__ field1 \"__field:field1__\" field2 \"__field:field2__\" field3 \"__field:field3__\" field4 \"__field:field4__\" field5 \"__field:field5__\" field6 \"__field:field6__\" field7 \"__field:field7__\" field8 \"__field:field8__\" field9 \"__field:field9__\" field10 \"__field:field10__\"", |
1302 | 1376 | "profiling": { |
1303 | 1377 | "delays": { |
1304 | 1378 | "write": { |
1305 | 1379 | "delay": 5, |
1306 | | - "duration": 15 |
| 1380 | + "duration": 10 |
1307 | 1381 | } |
1308 | 1382 | } |
1309 | 1383 | } |
|
1321 | 1395 | "xml_root_element": "doc", |
1322 | 1396 | "duration": 200, |
1323 | 1397 | "keyspacelen": 50000, |
1324 | | - "clients": 500, |
| 1398 | + "clients": 1000, |
1325 | 1399 | "sequential": true, |
1326 | 1400 | "command": "HSET rd0-{tag}:__rand_int__ field1 \"__field:field1__\" field2 \"__field:field2__\" field3 \"__field:field3__\" field4 \"__field:field4__\" field5 \"__field:field5__\" field6 \"__field:field6__\" field7 \"__field:field7__\" field8 \"__field:field8__\" field9 \"__field:field9__\" field10 \"__field:field10__\"", |
1327 | 1401 | "profiling": { |
1328 | 1402 | "delays": { |
1329 | 1403 | "write": { |
1330 | 1404 | "delay": 5, |
1331 | | - "duration": 15 |
| 1405 | + "duration": 10 |
1332 | 1406 | } |
1333 | 1407 | } |
1334 | 1408 | } |
|
1346 | 1420 | "xml_root_element": "doc", |
1347 | 1421 | "duration": 200, |
1348 | 1422 | "keyspacelen": 50000, |
1349 | | - "clients": 500, |
| 1423 | + "clients": 1000, |
1350 | 1424 | "sequential": true, |
1351 | 1425 | "command": "HSET rd0-{tag}:__rand_int__ field1 \"__field:field1__\" field2 \"__field:field2__\" field3 \"__field:field3__\" field4 \"__field:field4__\" field5 \"__field:field5__\" field6 \"__field:field6__\" field7 \"__field:field7__\" field8 \"__field:field8__\" field9 \"__field:field9__\" field10 \"__field:field10__\"", |
1352 | 1426 | "profiling": { |
1353 | 1427 | "delays": { |
1354 | 1428 | "write": { |
1355 | 1429 | "delay": 5, |
1356 | | - "duration": 15 |
| 1430 | + "duration": 10 |
1357 | 1431 | } |
1358 | 1432 | } |
1359 | 1433 | } |
|
1371 | 1445 | "xml_root_element": "doc", |
1372 | 1446 | "duration": 200, |
1373 | 1447 | "keyspacelen": 50000, |
1374 | | - "clients": 500, |
| 1448 | + "clients": 1000, |
1375 | 1449 | "sequential": true, |
1376 | 1450 | "command": "HSET rd0-{tag}:__rand_int__ field1 \"__field:field1__\" field2 \"__field:field2__\" field3 \"__field:field3__\" field4 \"__field:field4__\" field5 \"__field:field5__\" field6 \"__field:field6__\" field7 \"__field:field7__\" field8 \"__field:field8__\" field9 \"__field:field9__\" field10 \"__field:field10__\"", |
1377 | 1451 | "profiling": { |
1378 | 1452 | "delays": { |
1379 | 1453 | "write": { |
1380 | 1454 | "delay": 5, |
1381 | | - "duration": 15 |
| 1455 | + "duration": 10 |
1382 | 1456 | } |
1383 | 1457 | } |
1384 | 1458 | } |
|
1394 | 1468 | "flush_before": true, |
1395 | 1469 | "dataset": "datasets/wiki_10k_1field_10ktok_stemmable.csv", |
1396 | 1470 | "maxdocs": 10000, |
1397 | | - "clients": 500, |
| 1471 | + "clients": 1000, |
1398 | 1472 | "sequential": true, |
1399 | 1473 | "command": "HSET rd0-{tag}:__rand_int__ field1 \"__field:field1__\"", |
1400 | 1474 | "profiling": { |
1401 | 1475 | "delays": { |
1402 | 1476 | "write": { |
1403 | 1477 | "delay": 5, |
1404 | | - "duration": 15 |
| 1478 | + "duration": 10 |
1405 | 1479 | } |
1406 | 1480 | } |
1407 | 1481 | } |
|
1425 | 1499 | "delays": { |
1426 | 1500 | "write": { |
1427 | 1501 | "delay": 60, |
1428 | | - "duration": 120 |
| 1502 | + "duration": 10 |
1429 | 1503 | } |
1430 | 1504 | } |
1431 | 1505 | } |
1432 | 1506 | } |
1433 | 1507 | ] |
| 1508 | + }, |
| 1509 | + { |
| 1510 | + "group": 15, |
| 1511 | + "description": "Vector + Text Hybrid (KNN with filters)", |
| 1512 | + "scenarios": [ |
| 1513 | + { |
| 1514 | + "id": "a", |
| 1515 | + "type": "write", |
| 1516 | + "cluster_execution": "single", |
| 1517 | + "setup_commands": [ |
| 1518 | + "FT.CREATE rd0 ON HASH PREFIX 1 rd0- SCHEMA title TEXT price NUMERIC category TAG SEPARATOR | embedding VECTOR FLAT 6 DIM 256 DISTANCE_METRIC L2 TYPE FLOAT32" |
| 1519 | + ], |
| 1520 | + "flush_before": true, |
| 1521 | + "dataset": "datasets/vector_hybrid_100k.npy", |
| 1522 | + "maxdocs": 100000, |
| 1523 | + "clients": 1000, |
| 1524 | + "sequential": true, |
| 1525 | + "command": "HSET rd0-{tag}:__rand_int__ title \"__field:title__\" price \"__field:price__\" category \"__field:category__\" embedding \"__field:embedding__\"" |
| 1526 | + }, |
| 1527 | + { |
| 1528 | + "id": "b", |
| 1529 | + "type": "read", |
| 1530 | + "cluster_execution": "parallel", |
| 1531 | + "description": "Hybrid: Text filter + KNN", |
| 1532 | + "dataset": "datasets/vector_queries_100.npy", |
| 1533 | + "clients": 1000, |
| 1534 | + "duration": 200, |
| 1535 | + "options": { |
| 1536 | + "": "", |
| 1537 | + "NOCONTENT": "_nocontent" |
| 1538 | + }, |
| 1539 | + "warmup": 60, |
| 1540 | + "command": "FT.SEARCH rd0 \"(@title:__field:search_term__)=>[KNN 10 @embedding $vec AS score]\" PARAMS 2 vec \"__field:query_vector__\" RETURN 2 title score DIALECT 2" |
| 1541 | + }, |
| 1542 | + { |
| 1543 | + "id": "c", |
| 1544 | + "type": "read", |
| 1545 | + "cluster_execution": "parallel", |
| 1546 | + "description": "Hybrid: Numeric filter + KNN", |
| 1547 | + "dataset": "datasets/vector_queries_100.npy", |
| 1548 | + "clients": 1000, |
| 1549 | + "duration": 200, |
| 1550 | + "options": { |
| 1551 | + "": "", |
| 1552 | + "NOCONTENT": "_nocontent" |
| 1553 | + }, |
| 1554 | + "warmup": 60, |
| 1555 | + "command": "FT.SEARCH rd0 \"(@price:[100 500])=>[KNN 10 @embedding $vec AS score]\" PARAMS 2 vec \"__field:query_vector__\" RETURN 2 price score DIALECT 2" |
| 1556 | + } |
| 1557 | + ] |
1434 | 1558 | } |
1435 | 1559 | ], |
1436 | 1560 | "port": 6379, |
|
0 commit comments