Track B · 6 tasks, pick one
Docs to Demo
Pick a feature page of the Apache Doris docs, run it on your local Doris, and turn it into a step-by-step demo. Your pull request adds the demo to that page on doris.apache.org.
- 30–60 min per task
- Beginner-friendly
- SQL and a browser
- Ends in a docs PR
Stuck for more than 10 minutes? Come to the Doris table and ask Mingyu, or post in #dev on the Apache Doris Slack.
Get set up
How Track B works, a running cluster, and a fork of the docs.
How Track B works
One feature page, one demo, one pull request.
Every new Doris user starts on these pages. Running them from scratch is the fastest way to find what is missing, and a demo that runs top to bottom from an empty cluster is the best proof that a feature works. Yours goes on the page itself.
Follow the page. Open your task's doc page and run every example on your local Doris, exactly as written. Note anything that fails, prints something different, or leaves you guessing.
Build the demo. From an empty cluster, prove every point on your task's checklist. Run it top to bottom and keep the real output of every statement.
Add it to the page. A Step-by-step demo section right after Quick start, in both copies of the page. Fix what you found wrong in the same pull request.
Open the pull request on
apache/doris-website. It is your submission: see Submit & get your badge.
The panel shows the templates for the task you are reading
Before you start
docker pull apache/doris:all-in-one-4.1.3docker run -d --name doris -p 9030:9030 -p 8030:8030 -p 8040:8040 apache/doris:all-in-one-4.1.3docker exec -it doris mysql -uroot -h127.0.0.1 -P9030git clone --depth 1 --filter=blob:none --sparse https://github.com/<your-github-id>/doris-website.git && cd doris-website && git sparse-checkout set docs/key-features versioned_docs/version-4.x/key-features
- Host
- 127.0.0.1
- Port
- 9030
- User
- rootno password
- Database
- your own, e.g. fts_demo
Pick a task
6 feature pages. Pick one; finished early? Pick another: each task is its own pull request.
Full-text Search + BM25
Start fromFull-text Search+ BM25
Your demo proves
The page's operator table lists every MATCH_* form. Select score() as is and order by it: ordering by an expression around it, such as ROUND(score()), is rejected.
Vector Search
Start fromVector Index
Your demo proves
Every vector needs exactly dim numbers, the query vector included; otherwise the query fails with a dimension error.
Hybrid Search
Start fromHybrid Search+ Reciprocal Rank Fusion
Your demo proves
score() can't be selected in a vector-ranked query, and it can't sit inside ROW_NUMBER(): rank the plain score() in an outer query, as the RRF page does.
VARIANT
Start fromVARIANT Data Type
Your demo proves
variant_type(payload) shows the paths and types Doris inferred for one row; compare it with the DESC output.
Unique Key + Sequence Column
Start fromUnique Key
Your demo proves
Run the three writes as one INSERT and as three separate INSERTs: the result must not change.
Stream Load
Start fromStream Load
Your demo proves
Send the load to the FE at 127.0.0.1:8030 with curl --location-trusted: the FE redirects it to the BE, and the all-in-one container answers on both ports.
Ship it
What your pull request adds, how to submit it, and the badge.
What your pull request adds
One pull request on apache/doris-website, and it is your submission.
- Demo section
## Step-by-step demoright after Quick start, one step per point on your checklist: a SQL block, then Expected result with the real output. It starts from an empty cluster, so it creates its own database. - Both copiesThe same change in
docs/key-features/<page>.mdxandversioned_docs/version-4.x/key-features/<page>.mdx. These pages exist only in English. - FixesAnything wrong you found elsewhere on the page, fixed in the same pull request. Not sure it is wrong? List it in the description instead.
- DescriptionThe repository's pull request template (dev + 4.x, English) and one line that names your task, e.g.
CoC 2026 Glasgow hackathon · Track B · B1.
Templates for
## Step-by-step demo {#demo}One or two sentences: what this demo shows, from an empty cluster.### 1. A table with an inverted index (english parser, phrase support) on a text column```sqlCREATE DATABASE IF NOT EXISTS fts_demo;USE fts_demo;CREATE TABLE … ;```### 2. MATCH_ANY vs MATCH_ALL on the same words, with different row counts```sqlSELECT … ;```**Expected result**```+----+-------+| id | title |+----+-------+```### 3. A MATCH_PHRASE query that only matches when the words are adjacent```sqlSELECT … ;```**Expected result**```+----+-------+| id | title |+----+-------+```### 4. BM25 ranking: score() with ORDER BY … DESC LIMIT n, and why the top row wins```sqlSELECT … ;```**Expected result**```+----+-------+| id | title |+----+-------+```[docs] Add a step-by-step demo to the Full-text Search page## Versions- [x] dev- [x] 4.x- [ ] 3.x- [ ] 2.1 or older (not covered by version/language sync gate)## Languages- [ ] Chinese- [x] English(Keep the Docs Checklist from the template and tick what applies.)CoC 2026 Glasgow hackathon · Track B · B1 Full-text Search + BM25The key-features pages exist only in English; both copies get the same change:- docs/key-features/full-text-search.mdx- versioned_docs/version-4.x/key-features/full-text-search.mdx## What this PR changes- Adds a "Step-by-step demo" section after Quick start that shows: …- Fixes on the page: … (or "none")## What I found in the docs- Where: … / The page says: … / What happened: … / What it should say: …## ValidationRan every statement from an empty cluster on apache/doris:all-in-one-4.1.3; every Expected result is the real output.Panel: the templates for the task you read last
Definition of Done
Your checklistSubmit & get your badge
Take part → submit → get your badge.
Open your pull request on apache/doris-website, from a branch of your fork. The pull request is your submission; nothing else to fill in.
Show it at the Doris table (a 2-minute demo is plenty), or at the show-and-tell around 14:30.
Join the Apache Doris Slack and say hi in
#dev: questions, submissions and badges are all handled there.
Everyone who takes part in a task on site gets the Apache Doris Contributor badge: no merged pull request to Doris needed. Didn't finish by 15:00? Keep going — submissions are open until 31 October. Teams are fine, but not needed: list every member's GitHub ID in the pull request description.
Stretch goals
Pick a second task. Each finished task is its own pull request.
Go past the quick start. Run the longer examples the page links to, such as the table-design and SQL-manual pages; they are checked less often.
Review another Track B pull request. Run its demo on your Doris and leave a comment with what you got.
Troubleshooting & references
| Symptom | Fix |
|---|---|
docker: command not found on macOS | Start Docker Desktop. If it is running, link the CLI: sudo ln -s /Applications/Docker.app/Contents/Resources/bin/docker /usr/local/bin/docker |
error getting credentials when pulling images | Remove the credsStore field from ~/.docker/config.json (local dev only) |
port is already allocated | Something else uses 9030, 8030 or 8040, often another Doris. Stop it (docker ps), or publish other host ports, e.g. -p 19030:9030, and connect to 19030 |
The container name "/doris" is already in use | You started it before: docker start doris. To start over, docker rm -f doris (this deletes its data) |
The container exits, or never turns (healthy) | Read docker logs doris. Usually it is memory: give Docker Desktop 6 GB or more (Settings → Resources). On Apple Silicon, don't add --platform linux/amd64 |
permission denied: ./doris.sh | Your unzip tool dropped the executable bit: chmod +x doris.sh, or run bash doris.sh start |
Current database is not set | Run USE hackathon; first, or connect with -Dhackathon |
score() function requires WHERE clause with MATCH function, ORDER BY and LIMIT | Add a MATCH_* predicate, ORDER BY score() DESC and a LIMIT, and keep score() unwrapped (see the traps above) |
| Build Check fails on your pull request | Open the check's log. It is usually MDX: an unclosed tag, or a bare { or < in running text. Inside fenced code blocks anything goes |
B6: curl prints nothing or a 307 | Add --location-trusted: the FE redirects the load to the BE, and curl must follow it with your credentials |
B6: Label Already Exists | Expected on a rerun: a label loads at most once. Use a new label to load the file again |
| Stuck for more than 10 minutes | Come to the Doris table and ask Mingyu, or post in #dev on the Apache Doris Slack |
References
Full-text SearchVector IndexHybrid SearchVARIANT Data TypeUnique KeyStream LoadReciprocal Rank FusionDocumentation Contribution GuideDocs format specificationPull request guide
Apache Doris Hackathon
