Repository navigation
Using Milvus for video highlights: time-ranged evidence rows instead of text chunks #53969
sungbin1015
started this conversation in
Show and tell
Replies: 1 comment 1 reply
|
Have you considered grouping the evidence by time window or scene, with one row per segment and separate vector fields for STT, shot captions, and OCR ( You could then retrieve top candidates from each vector field and use Is there a reason you chose separate evidence rows over this segment-level multi-vector schema? |
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Sharing how we use Milvus to build highlight reels from baseball broadcasts. The retrieval result has to be a time range to cut from the video, not a paragraph, so the usual text-chunking approach did not fit.
One row = one piece of evidence with a time range
Instead of chunking by length, each row is a piece of "evidence" with
start_sec/end_sec:kindsttshotetcEach row also carries the key of the play it belongs to, so a hit maps straight back to the source row in our relational DB (MariaDB is the source of truth, Milvus is a derived search copy).
Collection
Milvus 2.6.18, 18 fields, dynamic field off. Definition:
milvus/sm_sport_baseball.jsonvector: 2560-dim,Qwen3-Embedding-4B, AUTOINDEX / COSINEtextfield is embedded (truncated at 1024 bytes)kind, inning, teams, labels, scoreboard tags, score, score deltaThe metadata is copied from the play onto every evidence row. It is redundant, but it lets one request do the vector search and the scalar filter together.
What we learned at query time
kindseparately. In a single mixed search,shotandetcrows outnumbersttand push the commentary out of the top results.One thing to watch for
We first created the collection through the RESTful v2 API and found that field descriptions were not kept, so we create it with pymilvus instead. This is already listed in #52163.
Try it
Search code: https://github.com/SceneMakerAI/agent-compose (
src/domains/baseball/graph/retrieve_evidence.py)If anyone indexes video or audio by time range, I would like to hear how you handle the per-kind imbalance. We run one search per kind; is a hybrid search with a ranker a better fit here?
All reactions