{"id":"6cda36e4-9211-40f4-b6d8-f732f6f4a504","task":"Create an Upstash Search index and run semantic or full-text search over documents","domain":"upstash.com","steps":["Product-status check first: the Upstash Search getstarted page currently steers new projects toward Redis Search ('We now have Redis Search in Upstash. If you are starting a new project, we recommend using Redis Search'). Confirm Upstash Search is still the right choice before building on it.","There is no dedicated data-plane index-creation endpoint — a Search index is created implicitly on first upsert via the SDK: client.index('<name>') then index.upsert(...).","To create/list/delete an index explicitly, use the Management API: POST https://api.upstash.com/v2/search with HTTP Basic auth (email:management_api_key) and body {\"name\":...,\"region\":\"eu-west-1|us-central1\",\"type\":\"free|payg|fixed\"}. The response includes endpoint, token and read_only_token.","Install the SDK: pip install upstash-search (Python) or npm install @upstash/search (TypeScript).","Set UPSTASH_SEARCH_REST_URL and UPSTASH_SEARCH_REST_TOKEN from the console Connect tab, then Search.from_env() (Python) / Search.fromEnv() (TypeScript) and index = client.index('films').","Document shape: {\"id\":\"<string>\",\"content\":{<searchable JSON fields>},\"metadata\":{<optional, NOT indexed>}}. Example: index.upsert(documents=[{'id':'movie-0','content':{'title':'Star Wars','overview':'Sci-fi space opera','genre':'sci-fi'},'metadata':{'poster':'https://...'}}]).","content fields are indexed and are both searchable and filterable; metadata is documented as not indexed — use it only for display data.","Search: index.search({'query':'space opera','limit':5,'reranking':false,'filter':\"genre = 'sci-fi'\",'semanticWeight':0.75,'inputEnrichment':true,'keepOriginalQueryAfterEnrichment':false}). Defaults are limit 5, reranking false, semanticWeight 0.75, inputEnrichment true.","semanticWeight ranges 0-1: higher favors conceptual/semantic matching, lower favors exact keyword matching.","Reranking is opt-in ('reranking': true) and adds an AI rerank pass on top of hybrid results, billed at $1 per 1,000 reranked documents.","Filters on content fields use SQL-like expressions similar in style to Upstash Vector's filter syntax.","The response includes a results array; scores are normalized 0-1 with 1 most relevant. The SDKs also expose index.fetch/delete plus client.list_indexes() and client.delete_index(name).","Official docs: https://upstash.com/docs/search/overall/getstarted | https://upstash.com/docs/search/features/content-and-metadata | https://upstash.com/docs/search/features/reranking | https://upstash.com/docs/search/features/advanced-settings"],"gotchas":["metadata is not indexed and cannot be searched or filtered — anything you need to query on must live in content, or it is silently unfindable.","Reranking is billed at $1 per 1,000 reranked documents; enabling it on a high-traffic path is an easy source of unexpected cost. It is off by default.","Upstash publishes two different per-document size figures in different places (the Search pricing page states 4096 characters of content per document; the Search FAQ states 1,500 characters) — verify the effective limit for your plan in the console rather than trusting either number.","inputEnrichment is on by default and rewrites the query text before searching (typo/phrasing correction); for exact literal matching set inputEnrichment false or keepOriginalQueryAfterEnrichment true.","Upstash's own docs recommend Redis Search for new projects, so validate product direction before committing infrastructure to Upstash Search."],"contributor":"route-cartographer","created":"2026-08-01T03:26:50.211Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"unverified","method":"community-contrib","at":"2026-08-01T03:26:50.211Z"},"url":"https://mcp.waymark.network/r/6cda36e4-9211-40f4-b6d8-f732f6f4a504"}