Rank products 19% better than keyword search
OpenSearch doc-v3-gte adds learned search terms to each product so shoppers can find it using different words. SIE is the open-source inference engine that serves the model; keep your existing search index.
OpenSearch doc-v3-gte on SIE
Top 3 are exact matchesryobi flashlight
- 1 Ryobi RFL905 160-Lumen … Cree LED Flashlight … Exact
- 2 Ryobi One+ P704 18V … Cordless Flashlight w/ Rotating Head … Exact
- 3 RYOBI P705 One+ 18V … LED 130 Lumen Flashlight … Exact
BM25, same search Replacement bulbs at ranks 1–3
Keyword search ranks the accessories above the product
BM25, Elasticsearch English analyzer
No scooter in the top 3pride mobility scooter
- 1 Pride Mobility Cup Holder Folding Go-Go Scooter C-Style Molded Seat Armrest Complement
- 2 Pride Mobility Scooter Rear Basket Center Support with Free Holding Clevis Pin Complement
- 3 Clip Cane Holder for Pride Mobility Scooters (Set of 2) Complement
The first scooter labelled Exact is at rank 11. Shoppers must scroll past accessories to find the product.
BM25, Elasticsearch English analyzer
Bulbs instead of flashlightsryobi flashlight
- 1 Ryobi Ridgid OEM 780287001 18V Flashlight Work Light Bulb (2 Pack) Complement
- 2 Podoy 780287001 Flashlight Bulbs for … Ryobi Ridgid 18V Flashlight … Complement
- 3 Ryobi 780287001 Light Bulbs for 18V Flashlight 4PK Complement
All three results are replacement bulbs. A shopper looking for a flashlight still has no product to buy.
- Baymard Institute 56% of ecommerce sites fail to support shoppers’ search needs
Poor-performing ecommerce Search leads to frustrating search experiences, time wasted refining queries, and abandonments…
19% better product ranking than keyword search, on 8,956 Amazon searches
- Tested
- 8,956 Amazon shopping searches across 482,105 products
- Scored
- nDCG@10, using human relevance labels
- Prices
- SIE Serverless and provider API list prices
Send the search and your listings, rank by shared terms
from sie_sdk import SIEClientclient = SIEClient(api_key="sk-sie-…")query = "querywayfair comforters"documents = [ "document 1···wayfair basics® comforter set···", "document 2···wayfair sleep medium weight all season polyester down alternative comforter···", "document 3···wayfair basics® reversible quilt set···", "document 4wayfair basics single curtain rod. Curtain Hardware & Accessories", "document 5wayfair basics peva shower curtain liner", "document 6wayfair basics round single curtain rod. Curtain Hardware & Accessories",]model = "modelopensearch-project/opensearch-neural-sparse-encoding-doc-v3-gte"q = client.encode(model, [{"text": query}], output_types=["sparse"], is_query=True)[0]["sparse"]docs = client.encode(model, [{"text": d} for d in documents], output_types=["sparse"], is_query=False)print(q)print(docs)import { SIEClient } from '@superlinked/sie-sdk';
const client = new SIEClient(undefined, { apiKey: 'sk-sie-…' });
const query = "wayfair comforters";
const documents = [
"···wayfair basics® comforter set···",
"···wayfair sleep medium weight all season polyester down alternative comforter···",
"···wayfair basics® reversible quilt set···",
"wayfair basics single curtain rod. Curtain Hardware & Accessories",
"wayfair basics peva shower curtain liner",
"wayfair basics round single curtain rod. Curtain Hardware & Accessories",
];
const model = 'opensearch-project/opensearch-neural-sparse-encoding-doc-v3-gte';
const [q] = await client.encode(model, [{ text: query }], {
outputTypes: ['sparse'],
isQuery: true,
});
const docs = await client.encode(
model,
documents.map((text) => ({ text })),
{ outputTypes: ['sparse'], isQuery: false },
);
console.log({ query: q, documents: docs });# Encode the query with is_query, then the listings; save native sparse vectors.
curl https://api.superlinked.com/v1/encode/opensearch-project%2Fopensearch-neural-sparse-encoding-doc-v3-gte \
-H "Authorization: Bearer sk-sie-…" \
-H "Content-Type: application/json" \
-d "{\"items\":[{\"text\":\"wayfair comforters\"}],\"params\":{\"output_types\":[\"sparse\"],\"options\":{\"is_query\":true}}}" \
-H "Accept: application/json" -o query.json
curl https://api.superlinked.com/v1/encode/opensearch-project%2Fopensearch-neural-sparse-encoding-doc-v3-gte \
-H "Authorization: Bearer sk-sie-…" \
-H "Content-Type: application/json" \
-d "{\"items\":[{\"text\":\"···wayfair basics® comforter set···\"},{\"text\":\"···wayfair sleep medium weight all season polyester down alternative comforter···\"},{\"text\":\"···wayfair basics® reversible quilt set···\"},{\"text\":\"wayfair basics single curtain rod. Curtain Hardware & Accessories\"},{\"text\":\"wayfair basics peva shower curtain liner\"},{\"text\":\"wayfair basics round single curtain rod. Curtain Hardware & Accessories\"}],\"params\":{\"output_types\":[\"sparse\"],\"options\":{\"is_query\":false}}}" \
-H "Accept: application/json" -o listings.jsonBuild the "Sparse embeddings" capability into my app using the Superlinked Inference Engine (SIE).
Context
- SIE is an OpenAI-style inference API. Python SDK: `from sie_sdk import SIEClient`; TypeScript: `@superlinked/sie-sdk`.
- Base URL: https://api.superlinked.com (or my regional endpoint). Auth: Bearer key from env `SIE_API_KEY` (never hard-code it).
- Model: opensearch-project/opensearch-neural-sparse-encoding-doc-v3-gte (SIE primitive: /encode). Keep the model id configurable.
Task
- Input: a search query plus the listings to rank.
- Behaviour: return the query and listing sparse vectors, with vocabulary ids and weights
- Send two POST /v1/encode requests: one item {text: query} with params {output_types: ["sparse"], options: {is_query: true}}, then all listings in one batch with params {output_types: ["sparse"], options: {is_query: false}}. Read items[i].sparse.indices (vocabulary ids) and .values (weights). Return these native sparse vectors without adding application scoring or ranking. In Python, use SIEClient.encode(..., output_types=["sparse"], is_query=True) for the query call and is_query=False for the listings; in TypeScript, pass isQuery: true and isQuery: false respectively. Do not issue one request per listing.
Deliverables
- A typed client wrapper, an application-level function for this task, error handling for timeouts/empty input, and unit tests with a stubbed client.
- Wire it into my existing stack (ask me which framework if unclear) and add a short usage example.way 3.49##fa 5.74##ir 6.48comfort 6.35##ers 4.19
- wayfair basics® comforter setExact 13.87
- wayfair sleep medium weight all season polyester down alternative comforterExact 13.28
- wayfair basics® reversible quilt setExact 12.47
- wayfair basics single curtain rodIrrelevant 6.22
- wayfair basics peva shower curtain linerIrrelevant 6.20
- wayfair basics round single curtain rodIrrelevant 6.14
The API returns sparse vectors. This display ranks the recorded vectors by dot product; labels are Wayfair's.
Encode your catalog once; searches need no model call
Serverless API
We host the models; you call one API.
- No idle GPUs, pay for what you use
- Fits your stack: SDK, API, CLI, MCP
- Self-host the same open-source engine
- SOC 2 Type 2, US or EU data residency
- Create an account to try Serverless
Self-hosted (Kubernetes)
Your data stays in your cloud, backed by our engineers.
- Terraform modules for your cloud
- Apache-2.0, same engine as Serverless
- GPU workers scale to zero between jobs
- Separate worker pools for each tenant
Deploy SIE to our AWS account with the superlinked/sie/aws Terraform module. Docs: superlinked.com/docs/deployment.Deploy SIE to our Google Cloud project with the superlinked/sie/google Terraform module. Docs: superlinked.com/docs/deployment.Deploy SIE to our Azure subscription with the superlinked/sie/azure Terraform module. Docs: superlinked.com/docs/deployment.Deploy SIE to our Alibaba Cloud account with the superlinked/sie/alicloud Terraform module. Docs: superlinked.com/docs/deployment. Run locally
The open-source server on your own machine.
- NVIDIA
- One container, no cluster
- Process your data fully offline
- Same SDK and model IDs as Serverless
docker run --gpus all -p 8080:8080 ghcr.io/superlinked/sie-server:latest-cuda12-default