mirror of https://github.com/sysown/proxysql
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
4.8 KiB
102 lines
4.8 KiB
#!/bin/bash
|
|
|
|
# Vector Similarity Search Testing Script
|
|
# Tests vector search capabilities
|
|
|
|
set -e
|
|
|
|
echo "=== Vector Similarity Search Testing ==="
|
|
echo "Starting at: $(date)"
|
|
echo ""
|
|
|
|
# Configuration
|
|
PROXYSQL_HOST="127.0.0.1"
|
|
PROXYSQL_PORT="6030"
|
|
MYSQL_USER="root"
|
|
MYSQL_PASS="root"
|
|
|
|
# Test results tracking
|
|
PASSED=0
|
|
FAILED=0
|
|
|
|
# Function to execute MySQL query and handle results
|
|
execute_test() {
|
|
local test_name="$1"
|
|
local sql_query="$2"
|
|
expected_pattern="$3"
|
|
|
|
echo "Testing: $test_name"
|
|
echo "Query: $sql_query"
|
|
|
|
# Execute the query
|
|
result=$(mysql -h "$PROXYSQL_HOST" -P "$PROXYSQL_PORT" -u "$MYSQL_USER" -p"$MYSQL_PASS" -s -N -e "$sql_query" 2>&1)
|
|
local exit_code=$?
|
|
|
|
if [ $exit_code -eq 0 ]; then
|
|
# Check if result matches expected pattern
|
|
if [ -n "$expected_pattern" ] && ! echo "$result" | grep -q "$expected_pattern"; then
|
|
echo "❌ FAILED: $test_name - Pattern not matched"
|
|
echo "EXPECTED: $expected_pattern"
|
|
echo "RESULT: $result"
|
|
((FAILED++))
|
|
else
|
|
echo "✅ SUCCESS: $test_name"
|
|
echo "Result:"
|
|
echo "$result"
|
|
((PASSED++))
|
|
fi
|
|
else
|
|
echo "❌ FAILED: $test_name - Query execution error"
|
|
echo "ERROR: $result"
|
|
((FAILED++))
|
|
fi
|
|
|
|
echo "----------------------------------------"
|
|
echo ""
|
|
}
|
|
|
|
# Test 1: Exact match search
|
|
execute_test "Exact match search" "
|
|
SELECT rowid, distance
|
|
FROM embeddings
|
|
WHERE vector MATCH json('[1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]')
|
|
ORDER BY distance ASC;
|
|
" "1.*0.0"
|
|
|
|
# Test 2: Similar vector search
|
|
execute_test "Similar vector search" "
|
|
SELECT rowid, distance
|
|
FROM embeddings
|
|
WHERE vector MATCH json('[0.9, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]')
|
|
ORDER BY distance ASC;
|
|
" "3.*0.1"
|
|
|
|
# Test 3: Document similarity search
|
|
execute_test "Document similarity search" "
|
|
SELECT rowid, distance
|
|
FROM documents
|
|
WHERE embedding MATCH json('[0.5, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]')
|
|
ORDER BY distance ASC LIMIT 3;
|
|
" ""
|
|
|
|
# Test 4: Search with result ordering
|
|
execute_test "Search with result ordering" "
|
|
SELECT rowid, distance
|
|
FROM embeddings
|
|
WHERE vector MATCH json('[0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]')
|
|
ORDER BY distance ASC;
|
|
" "2.*0.0"
|
|
|
|
# Summary
|
|
echo "=== Test Summary ==="
|
|
echo "Total tests: $((PASSED + FAILED))"
|
|
echo "Passed: $PASSED"
|
|
echo "Failed: $FAILED"
|
|
|
|
if [ $FAILED -eq 0 ]; then
|
|
echo "🎉 All similarity search tests passed!"
|
|
exit 0
|
|
else
|
|
echo "❌ $FAILED tests failed!"
|
|
exit 1
|
|
fi |