Skip to content

POST /compose/search_slots/{db_name}/{namespace}

Searches across multiple slots simultaneously, with a different query and optional weight per slot. The final score is a weighted average of per-slot similarities.


Request

Content-Type: application/json

URL Parameters:

Parameter Description
db_name Name of the database
namespace Namespace within the database

Body:

Parameter Type Required Default Description
slot_queries object ✅ — Map of slot name → query config. See slot query format below
top_k int ❌ 10 Number of results to return
schema_json_data string ❌ null JSON string of the schema. Required if schema is not stored in metadata

Slot query format — each entry in slot_queries can be a plain string or a full config object:

{
  "subject": { "query": "Einstein", "mode": "filter", "threshold": 0.5 },
  "predicate": { "query": "developed", "weight": 0.3, "encoding": "exact" },
  "object":    { "query": "physics",   "weight": 0.7, "encoding": "semantic" }
}
Field Type Required Default Description
query string ✅ — Value to search for in this slot
weight float ❌ 1.0 Relative weight for this slot's score contribution
encoding string ❌ schema-inferred Encoding override for this slot
mode string ❌ schema or "rank" "filter" eliminates candidates below threshold; "rank" contributes to score
threshold float ❌ schema or 0.0 Minimum similarity for filter mode (0.0 to 1.0)

Behavior

Each slot query is encoded independently using its slot's encoding strategy (or the provided override). Slots with mode="filter" eliminate candidates whose similarity falls below threshold before ranking. Remaining candidates are scored by a weighted average of mode="rank" slots only. Semantic slot queries have their embeddings loaded into the cache before the Rust call.

A schema is required — either stored in metadata from ingest, or provided via schema_json_data.


Responses

200 OK

{
  "status": "success",
  "query_type": "multi_slot_search",
  "slot_queries": {
    "subject":   "Einstein",
    "predicate": { "query": "developed", "weight": 0.3 }
  },
  "count": 3,
  "results": [
    {
      "_id": 14,
      "_score": 0.874,
      "data": {
        "subject":   "Einstein",
        "predicate": "developed",
        "object":    "Relativity"
      }
    }
  ]
}
Field Description
slot_queries The slot queries as provided
count Number of results returned
results Array of matches with _id, _score, and data

Error Responses

Status Condition
400 No schema found, none provided, or invalid slot query format
404 Collection not found
500 Unexpected internal error

Notes

  • Weights do not need to sum to 1.0 — they are used as relative importance signals.
  • Filter-mode slots do not contribute to the ranking score. Multiple filter slots are conjunctive (AND).
  • If mode is not specified in the query, the schema-level default is used (defaults to "rank").
  • For a single-slot query, prefer /compose/search_slot for simplicity.
  • Schema must be available — either stored from ingest or passed in schema_json_data.

Example

import requests

SERVER_URL = "http://18.220.128.24:8000"
API_KEY    = "yourapitoken"

def search_slots(db_name: str, namespace: str, slot_queries: dict, top_k: int = 10) -> dict:
    response = requests.post(
        f"{SERVER_URL}/compose/search_slots/{db_name}/{namespace}",
        headers={"X-API-Key": API_KEY},
        json={
            "slot_queries": slot_queries,
            "top_k":        top_k,
        },
    )
    response.raise_for_status()
    return response.json()


result = search_slots(
    db_name="my_db",
    namespace="triples",
    slot_queries={
        "subject":   "Einstein",
        "predicate": {"query": "developed", "weight": 0.3, "encoding": "exact"},
        "object":    {"query": "physics",   "weight": 0.7, "encoding": "semantic"},
    },
    top_k=5,
)
print(result)

Expected output:

{
  "status": "success",
  "query_type": "multi_slot_search",
  "slot_queries": {
    "subject": "Einstein",
    "predicate": { "query": "developed", "weight": 0.3, "encoding": "exact" },
    "object":    { "query": "physics",   "weight": 0.7, "encoding": "semantic" }
  },
  "count": 2,
  "results": [
    { "_id": 14, "_score": 0.874, "data": { "subject": "Einstein", "predicate": "developed", "object": "Relativity" } },
    { "_id": 21, "_score": 0.741, "data": { "subject": "Einstein", "predicate": "wrote",     "object": "physics paper" } }
  ]
}