|
| 1 | +# QQL / Qdrant Compatibility Matrix |
| 2 | + |
| 3 | +> Tracks the current Python `qql-cli` surface and known companion status for `qql-go`. |
| 4 | +> Last checked: 2026-04-28. |
| 5 | +
|
| 6 | +This document should describe implemented behavior conservatively. If a feature is planned but not implemented, keep it marked as missing until tests exist. |
| 7 | + |
| 8 | +## Legend |
| 9 | + |
| 10 | +| Symbol | Meaning | |
| 11 | +|---|---| |
| 12 | +| Supported | Implemented and covered by normal usage/tests | |
| 13 | +| Partial | Implemented with known limits | |
| 14 | +| Missing | Not currently exposed by QQL | |
| 15 | +| Planned | Roadmap or RFC candidate | |
| 16 | +| Unknown | Needs verification in that implementation | |
| 17 | + |
| 18 | +## Collection Management |
| 19 | + |
| 20 | +| Feature | Qdrant API | Python `qql-cli` | Go `qql-go` | Notes | |
| 21 | +|---|---|---|---|---| |
| 22 | +| Create collection | `create_collection` | Supported | Supported | Dense collection | |
| 23 | +| Create hybrid collection | `create_collection` with sparse vectors | Supported | Supported | `CREATE COLLECTION ... HYBRID` | |
| 24 | +| Create with custom distance | Vector params | Missing | Missing | Currently cosine-only in Python | |
| 25 | +| Create with custom HNSW | `hnsw_config` | Missing | Missing | Roadmap candidate | |
| 26 | +| Create with quantization | `quantization_config` | Missing | Missing | Roadmap candidate | |
| 27 | +| Create with on-disk payload | `on_disk_payload` | Missing | Missing | Roadmap candidate | |
| 28 | +| Create with multivectors | `multivector_config` | Missing | Missing | Advanced roadmap candidate | |
| 29 | +| Drop collection | `delete_collection` | Supported | Supported | `DROP COLLECTION` | |
| 30 | +| List collections | `get_collections` | Supported | Supported | `SHOW COLLECTIONS` | |
| 31 | +| Collection info | `get_collection` | Missing | Missing | Proposed as `DESCRIBE COLLECTION` | |
| 32 | +| Collection aliases | Alias APIs | Missing | Missing | Later idea | |
| 33 | +| Collection snapshots | Snapshot APIs | Missing | Missing | Later idea | |
| 34 | + |
| 35 | +## Points / Documents |
| 36 | + |
| 37 | +| Feature | Qdrant API | Python `qql-cli` | Go `qql-go` | Notes | |
| 38 | +|---|---|---|---|---| |
| 39 | +| Insert point | `upsert` | Supported | Supported | Requires a `text` field for embedding | |
| 40 | +| Insert bulk | `upsert` | Supported | Supported | `INSERT BULK` | |
| 41 | +| Explicit point ID on insert | `upsert` | Supported | Supported | Integer or UUID string | |
| 42 | +| Get point by ID | `retrieve` | Missing | Missing | Near-term roadmap candidate | |
| 43 | +| Update payload | `set_payload` | Missing | Missing | Near-term roadmap candidate | |
| 44 | +| Delete point by ID | `delete` | Supported | Supported | `DELETE ... WHERE id = ...` | |
| 45 | +| Delete points by filter | `delete` with filter selector | Supported | Supported | Python parser/executor support non-ID filters | |
| 46 | +| Delete payload keys | `delete_payload` | Missing | Missing | Near-term roadmap candidate | |
| 47 | +| Count points | `count` | Missing | Missing | Near-term roadmap candidate | |
| 48 | +| Scroll points | `scroll` | Missing | Missing | Near-term roadmap candidate | |
| 49 | + |
| 50 | +## Search |
| 51 | + |
| 52 | +| Feature | Qdrant API | Python `qql-cli` | Go `qql-go` | Notes | |
| 53 | +|---|---|---|---|---| |
| 54 | +| Dense search | `query_points` | Supported | Supported | Default mode | |
| 55 | +| Hybrid search | `query_points` + RRF | Supported | Supported | `USING HYBRID` | |
| 56 | +| Sparse-only search | `query_points` sparse vector | Supported | Supported | `USING SPARSE` | |
| 57 | +| Exact search | `SearchParams.exact` | Supported | Supported | `EXACT` or `WITH { exact: true }` | |
| 58 | +| HNSW ef tuning | `SearchParams.hnsw_ef` | Supported | Supported | `WITH { hnsw_ef: N }` | |
| 59 | +| ACORN filtered search | `SearchParams.acorn` | Supported | Supported | Depends on Qdrant support | |
| 60 | +| Search with filters | `Filter` | Supported | Supported | `WHERE` clause | |
| 61 | +| Search pagination | `offset` | Missing | Missing | Near-term roadmap candidate | |
| 62 | +| Batch search | Batch/query APIs | Missing | Missing | Later idea | |
| 63 | +| MMR diversity | Query diversity controls | Missing | Missing | Later idea | |
| 64 | +| Score boosting | Formula/rescore APIs | Missing | Missing | Later idea | |
| 65 | +| Multivector search | Multivector query | Missing | Missing | Later idea | |
| 66 | +| Rerank | Cross-encoder / inference | Supported | Partial | Python uses local Fastembed cross-encoder; Go behavior should be checked against `qql-go` docs | |
| 67 | +| Relevance feedback | Feedback query | Missing | Missing | Later idea | |
| 68 | + |
| 69 | +## Recommend |
| 70 | + |
| 71 | +| Feature | Qdrant API | Python `qql-cli` | Go `qql-go` | Notes | |
| 72 | +|---|---|---|---|---| |
| 73 | +| Recommend by examples | Recommend query | Supported | Supported | `RECOMMEND FROM` | |
| 74 | +| Positive/negative IDs | Recommend input | Supported | Supported | | |
| 75 | +| Strategy selection | `RecommendStrategy` | Supported | Supported | `average_vector`, `best_score`, `sum_scores` | |
| 76 | +| Cross-collection lookup | `lookup_from` | Supported | Supported | | |
| 77 | +| Named vector usage | `using` | Supported | Supported | | |
| 78 | +| Offset | `offset` | Supported | Supported | | |
| 79 | +| Score threshold | `score_threshold` | Supported | Supported | | |
| 80 | +| Filtered recommend | `Filter` | Supported | Supported | `WHERE` clause | |
| 81 | + |
| 82 | +## Payload Indexes |
| 83 | + |
| 84 | +| Feature | Qdrant API | Python `qql-cli` | Go `qql-go` | Notes | |
| 85 | +|---|---|---|---|---| |
| 86 | +| Keyword index | `create_payload_index` | Supported | Supported | | |
| 87 | +| Integer index | `create_payload_index` | Supported | Supported | Python syntax uses `TYPE integer` | |
| 88 | +| Float index | `create_payload_index` | Supported | Supported | | |
| 89 | +| Bool index | `create_payload_index` | Supported | Supported | | |
| 90 | +| Text index | `create_payload_index` | Supported | Partial | Go support should be verified | |
| 91 | +| Geo index | `create_payload_index` | Supported | Missing | Python maps `TYPE geo` | |
| 92 | +| Datetime index | `create_payload_index` | Supported | Missing | Python maps `TYPE datetime` | |
| 93 | + |
| 94 | +## Filtering |
| 95 | + |
| 96 | +| Feature | Qdrant model | Python `qql-cli` | Go `qql-go` | Notes | |
| 97 | +|---|---|---|---|---| |
| 98 | +| Equality | `MatchValue` | Supported | Supported | `=` | |
| 99 | +| Inequality | `must_not` + `MatchValue` | Supported | Supported | `!=` | |
| 100 | +| Range | `Range` | Supported | Supported | `>`, `<`, `>=`, `<=` | |
| 101 | +| Between | `Range` | Supported | Supported | Inclusive | |
| 102 | +| In list | `MatchAny` | Supported | Supported | `IN (...)` | |
| 103 | +| Not in list | `MatchExcept` | Supported | Supported | `NOT IN (...)` | |
| 104 | +| Is null | `IsNull` | Supported | Supported | | |
| 105 | +| Is empty | `IsEmpty` | Supported | Supported | | |
| 106 | +| Full-text match | `MatchText` | Supported | Supported | `MATCH` | |
| 107 | +| Match any term | `MatchTextAny` | Supported | Supported | `MATCH ANY` | |
| 108 | +| Match phrase | `MatchPhrase` | Supported | Supported | `MATCH PHRASE` | |
| 109 | +| Logical operators | `must`, `should`, `must_not` | Supported | Supported | `AND`, `OR`, `NOT` | |
| 110 | +| Nested fields | Payload key paths | Supported | Supported | Dot notation | |
| 111 | +| Nested array access | Payload key paths | Partial | Partial | Keep examples conservative until integration-tested | |
| 112 | + |
| 113 | +## Version Notes |
| 114 | + |
| 115 | +| Implementation | Current version in this repo/docs | Notes | |
| 116 | +|---|---|---| |
| 117 | +| Python `qql-cli` | `1.4.0` | Source of truth for this repository | |
| 118 | +| Go `qql-go` | `0.1.x` | Companion implementation; verify exact behavior in the Go repo before release claims | |
| 119 | + |
| 120 | +## Known Gaps |
| 121 | + |
| 122 | +| Gap | Impact | Suggested next step | |
| 123 | +|---|---|---| |
| 124 | +| No `GET` statement | Hard to inspect one point from the CLI | Add RFC or issue | |
| 125 | +| No `SCROLL` statement | Hard to page/export large collections through QQL syntax | Add RFC or issue | |
| 126 | +| No `COUNT` statement | Hard to validate scripts and filters | Add RFC or issue | |
| 127 | +| No `DESCRIBE COLLECTION` | Users must drop to SDK/Qdrant UI for collection metadata | Add RFC or issue | |
| 128 | +| No payload update syntax | Metadata updates require SDK calls or full reinsert | Add RFC or issue | |
| 129 | +| Limited custom collection configuration | Advanced users need SDK for distance/HNSW/quantization | Define minimal syntax before implementing | |
| 130 | + |
| 131 | +## Maintenance Rule |
| 132 | + |
| 133 | +When changing QQL behavior: |
| 134 | + |
| 135 | +1. Update this matrix in the same PR. |
| 136 | +2. Link or mention tests that prove the status. |
| 137 | +3. Mark companion implementation status as `Unknown` rather than guessing. |
| 138 | +4. Avoid future-tense claims unless there is an accepted RFC or linked issue. |
0 commit comments