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.

1

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.

  1. 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.

  2. 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.

  3. 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.

  4. 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.3
  • docker run -d --name doris -p 9030:9030 -p 8030:8030 -p 8040:8040 apache/doris:all-in-one-4.1.3
  • docker exec -it doris mysql -uroot -h127.0.0.1 -P9030
  • git 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
2

Pick a task

6 feature pages. Pick one; finished early? Pick another: each task is its own pull request.

Full-text Search + BM25

30–45 min · edits key-features/full-text-search.mdx

Start fromFull-text Search+ BM25

Your demo proves

Tip

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

30–45 min · edits key-features/vector-index.mdx

Start fromVector Index

Your demo proves

Tip

Every vector needs exactly dim numbers, the query vector included; otherwise the query fails with a dimension error.

Hybrid Search

30–45 min · edits key-features/hybrid-search.mdx

Start fromHybrid Search+ Reciprocal Rank Fusion

Your demo proves

Tip

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

30–45 min · edits key-features/variant-data-type.mdx

Start fromVARIANT Data Type

Your demo proves

Tip

variant_type(payload) shows the paths and types Doris inferred for one row; compare it with the DESC output.

Unique Key + Sequence Column

30–45 min · edits key-features/unique-key.mdx

Start fromUnique Key

Your demo proves

Tip

Run the three writes as one INSERT and as three separate INSERTs: the result must not change.

Stream Load

30–60 min · edits key-features/stream-load.mdx

Start fromStream Load

Your demo proves

Tip

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.

3

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 demo right 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>.mdx and versioned_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

B1 · page sectionfull-text-search.mdx · template
## 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 |+----+-------+```
B1 · pull requesttitle + description · template
[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 checklist

Submit & get your badge

Take part → submit → get your badge.

  1. 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.

  2. Show it at the Doris table (a 2-minute demo is plenty), or at the show-and-tell around 14:30.

  3. 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

SymptomFix
docker: command not found on macOSStart 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 imagesRemove the credsStore field from ~/.docker/config.json (local dev only)
port is already allocatedSomething 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 useYou 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.shYour unzip tool dropped the executable bit: chmod +x doris.sh, or run bash doris.sh start
Current database is not setRun USE hackathon; first, or connect with -Dhackathon
score() function requires WHERE clause with MATCH function, ORDER BY and LIMITAdd a MATCH_* predicate, ORDER BY score() DESC and a LIMIT, and keep score() unwrapped (see the traps above)
Build Check fails on your pull requestOpen 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 307Add --location-trusted: the FE redirects the load to the BE, and curl must follow it with your credentials
B6: Label Already ExistsExpected on a rerun: a label loads at most once. Use a new label to load the file again
Stuck for more than 10 minutesCome 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

All tasks

Back to the course
  1. A160–120 minHybrid Search AppOpen the brief
  2. A245–90 minAsk Doris with MCPOpen the brief
  3. A360–120 minLog Search ExplorerOpen the brief
  4. A460–120 minAgent Trace ExplorerOpen the brief
  5. B30–60 minTrack B · Docs to DemoYou are here