# WHERE से Filtering: SQL और Vectors साथ — Vector Databases

Source: https://www.geekswithgeeks.com/hi/vector-databases/p-filter

> Similarity क्रम को relational शर्तों के साथ मिलाएँ।

## सामान्य SQL शर्तें सीधे काम करती हैं

चूँकि vector एक column है, आप सामान्य `WHERE` से filter करते हैं: `WHERE tenant = 'acme' AND year = 2025 ORDER BY embedding <=> :q LIMIT 2`। आप अन्य tables (users, permissions, products) से **join**, `IN` सूचियाँ, सीमाएँ, `OR` और यह लागू करने को **row-level security** भी उपयोग कर सकते हैं कि कौन-सी rows कौन देखे, जो सीमित query भाषा वाले engines पर बड़ा लाभ है। ध्यान रखें कि **approximate index** के साथ संचालन का क्रम मायने रखता है (अगला खंड ऐसा filter दिखाता है जो शून्य rows लौटाता है), और सटीक scan हमेशा filter मानता है। **सुरक्षा filters query या row-level security में** रखें, application के पाठ prompts में कभी नहीं।

## Similarity और relational filters, चलाकर

मैंने यह SQL Docker container में pgvector extension संस्करण 0.8.6 के साथ PostgreSQL 16 पर चलाया। Tenant `acme` और वर्ष 2025 तक सीमित करने पर 2022 की नीति और दूसरे tenant का memo बाहर हो जाते हैं, leave नीति और travel दस्तावेज़ बचते हैं, सबसे पास पहले।

```sql
SELECT id, tenant, year, body
FROM docs
WHERE tenant = 'acme' AND year = 2025
ORDER BY embedding <=> '[1,0,0]'
LIMIT 2;
```

Output:

```
 id | tenant | year |       body        
----+--------+------+-------------------
  1 | acme   | 2025 | leave policy 2025
  3 | acme   | 2025 | travel and hotels
(2 rows)
```

## अपने filter columns को भी index करें

Filter चयनात्मक हो तो `tenant` या `year` पर B-tree index planner की मदद करता है। EXPLAIN से जाँचें।

**Quiz:** Filtering के लिए pgvector की एक ताक़त कौन-सी है?

- [x] पूरा SQL: joins, सीमाएँ, row-level security
- [ ] कोई filtering संभव नहीं
- [ ] सिर्फ़ एक field पर equality
- [ ] Filtering सिर्फ़ prompt में

*Answer:* पूरा SQL: joins, सीमाएँ, row-level security. Relational database में vector बस एक और column है।
