Mindloom’s search endpoint exposes two fundamentally different strategies behind a single URL. Semantic mode converts your query into a 384-dimensional embedding and asks Oracle to rank every stored document by cosine distance — surfacing results that share meaning even when they share no words. Keyword mode bypasses the inference service entirely and falls back to a SQLDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/No-Country-simulation/G9-LATAM-Team-58/llms.txt
Use this file to discover all available pages before exploring further.
LIKE scan, trading recall and ranking for simplicity and zero latency overhead. Both modes are accessed via GET /search?q=…, but their behaviour, filtering logic, and response metadata differ in ways that matter when you build on top of them.
The two search modes
Semantic search (default)
Whenmode=semantic (or when mode is omitted), the API calls the inference service’s /embed endpoint to convert the query into a vector, then runs VECTOR_DISTANCE(COSINE) against every stored embedding in Oracle ADB.
Step-by-step flow:
Query embedding — /embed
The API POSTs to the inference service with
type=query so the E5 model applies its "query: " prefix before encoding:Vector distance query in Oracle
The 384 floats are serialised to a bracket-delimited string via
VectorUtils.toVectorString(), then passed into TO_VECTOR(?, 384, FLOAT32) in the query, with optional category filtering:Keyword search (mode=keyword)
Keyword mode never calls the inference service. It runs a SQL LIKE scan across the title and body columns:
similarity is hardcoded to 1.0 for all results (there is no ranking), and elapsedMs is hardcoded to 0.
Mode comparison
| Feature | semantic | keyword |
|---|---|---|
| Uses inference service | Yes (/embed) | No |
| Category filter | WHERE category = :category column filter | Concatenated to the query string |
similarity field | Real cosine score (0–1) | Fixed 1.0 |
elapsedMs | Real wall-clock milliseconds | Fixed 0 |
| Finds synonyms / paraphrases | Yes | No |
| Result ordering | By semantic similarity | Unspecified (DB default) |
Request parameters
| Parameter | Default | Description |
|---|---|---|
q | required | Query string. Blank value returns 400 VALIDATION_ERROR. |
mode | semantic | semantic or keyword (case-insensitive). Any other value returns 400. |
category | — | Optional category filter. Only functions as a column filter in semantic mode. |
page | 0 | Zero-based page index. |
size | 10 | Page size. |
Example request and response
total in the response is the page size — it equals results.size(), not the overall number of matching documents. With size=10 and 500 matching items, total will be 10. Do not use total to compute a page count or show a total-results figure; those values require a separate COUNT query that is not currently part of the contract.Choosing the right mode
Response field reference
mode
Echoes the mode used for the query:
"semantic" or "keyword". Useful for logging and debugging.total
The number of results in this page (
results.size()). Not the overall hit count. See the note above.elapsedMs
Wall-clock time in milliseconds for the embedding call plus vector query. Always
0 in keyword mode.results[].similarity
Cosine similarity as
1 − VECTOR_DISTANCE(…, COSINE). Range 0–1; higher is more similar. Always 1.0 in keyword mode.