Add multi-representation search tutorial notebook#103
Open
Dylancouzon wants to merge 7 commits into
Open
Conversation
Companion notebook to the multi-representation search tutorial in qdrant/landing_page#2334. Builds the recommended retrieval pipeline (three named-vector prefetches, RRF fusion, document-level grouping) step by step against a 2,000-paper ML/CS arXiv slice, with qualitative top-K results at each step. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ries as filter Brings the notebook to 1:1 parity with the refactored tutorial: - Switches to Qdrant Cloud Inference for dense + core BM25 for sparse (drops FastEmbed from the notebook dependencies) - Renames dense_summary to dense_abstract and sparse_keywords to sparse_title - Moves categories from BM25 input to a filterable payload field with a keyword index; sparse_title now indexes only the title (avg_len=10) - Adds dense_abstract as a fourth prefetch with its own Step 4, so the build-up now reads: chunk -> +sparse -> +title -> +abstract -> group -> formula - Adds an optional tags filter to retrieve_grouped - Updates probe_queries.py to match the new schema and step structure
Wraps every $score term in MultExpression (with weight 1.0 on chunk) so the formula reads uniformly. Adds a comment above the QdrantClient init pointing readers to https://cloud.qdrant.io for their own url and api_key.
Adds the missing keyword index on document_id so the grouping step (query_points_groups with group_by="document_id") works under strict mode. Tweaks the upload_points call to batch_size=256, parallel=2 for faster ingestion against Cloud Inference. Adds an expected-results summary to the wrap-up so readers running the same query against the same dataset can compare their output to the reference.
Dylancouzon
added a commit
to qdrant/landing_page
that referenced
this pull request
May 12, 2026
Adds the missing keyword index on document_id so grouping works under strict mode (Cloud default), and tunes the upload_points call to batch_size=256, parallel=2 for faster ingestion. Mirrors the notebook in qdrant/examples#103.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
qdrant/landing_page#2334.
Scope
The tutorial covers why of the design; this notebook covers the how end to end:
gfissore/arxiv-abstracts-2021(cs.LG / cs.CV / cs.CL / cs.AI / stat.ML) so the demo queries have natural matches.dense_chunk,dense_title,dense_summary) and one named sparse vector (sparse_keywords) using FastEmbed (BAAI/bge-small-en-v1.5+Qdrant/bm25).dense_titleprefetchquery_points_groupsfor document-level groupingFormulaQueryboostFile
multi-representation-search/multi-representation-search.ipynb— single notebook, 22 cells.Requirements
Notebook is tested on Python 3.11 and 3.12. Some FastEmbed dependencies don't yet ship wheels for Python 3.14.