Engine für strukturierte Ähnlichkeit & Anomalie-Erkennung
Laden Sie Ihren Katalog — Produkte, Transaktionen, Sensordaten — als normale Datensätze. Sie erhalten ähnliche Datensätze und statistische Ausreißer zurück, direkt auf Ihren numerischen Rohfeldern. Keine Vektoren. Keine Modelle. Keine Pipeline.
Live-Playground
Kein Konto, kein Setup. Der Button unten lädt einen Katalog mit 45 Produkten in diesen Server
(Sammlung demo), und Sie fragen ihn live ab. Es ist exakt die API aus der Doku — der Playground
ruft sie nur aus Ihrem Browser auf.
Wählen Sie ein Produkt; wir geben seine nächsten Nachbarn nach Feld-Nähe zurück (interpretierbarer Score).
Statistische Anomalien auf dem price-Feld. Drei Produkte sind absichtlich falsch bepreist — können Sie alle drei finden? Senken Sie die z-Schwelle, um das Netz zu verbreitern.
Numerischer Bereich + kategorialer Filter, verknüpft mit UND — die Kern-„Bereich + UND/ODER“-Abfrage.
Was es ist
Pop-Search ist eine Engine für strukturierte Ähnlichkeit & Anomalie-Erkennung. Sie laden Ihre Daten als gewöhnliche Datensätze — und Pop-Search findet Datensätze, die einem gegebenen ähnlich sind, und solche, die statistisch nicht dazu passen. Und das mit den Feldern, die Sie bereits haben.
Pop-Search arbeitet direkt mit den numerischen Feldern Ihrer Datensätze, etwa Preis, Bewertung oder Temperatur. Für diese Abfragen ist kein Embedding-Modell erforderlich. Ähnlichkeit bezieht sich auf die konfigurierten Felder; sie ersetzt keine semantische Textsuche.
Jedes Ähnlichkeits-Ergebnis kommt mit einem Score, den Sie lesen können, und einem Grund, den Sie erklären können — wichtig, wenn die Antwort einer Preiskontrolle, einer Fraud-Warteschlange oder einem Wartungsticket standhalten muss.
So funktioniert's
Sie laden Ihre Daten. Pop-Search indiziert Ihre numerischen Felder, sodass Ähnlichkeit, Bereichsfilterung und Anomalie-Erkennung schnell laufen — selbst auf einem kleinen 2-Core-/4 GB-Server.
Datensätze als JSON oder CSV-Batch laden. Definieren Sie, welche Felder numerisch und welche kategorial sind.
Pop-Search indiziert Ihre numerischen Felder für schnelle Ähnlichkeits-, Bereichs- und Anomalie-Abfragen.
Suchen mit Bereichen + Filtern, ähnliche Datensätze finden und Ausreißer erkennen — über HTTP, mit interpretierbaren Ergebnissen.
Die Interna können wir noch nicht teilen. Kurzversion: deterministisch, interpretierbar und ohne Vektoren — und gebaut, um auch auf bescheidener Hardware schnell zu bleiben. Dies ist eine Beta, offen für öffentliche Tests des Algorithmus. Was Sie hier sehen, ist, was wir heute zeigen können; die Details folgen.
Was Sie bekommen
Die nächsten Datensätze nach Feld-Nähe, jeweils mit interpretierbarem 0–1-Score.
Statistische Ausreißer pro numerischem Feld, mit z-Score, den Sie schwellen und erklären können.
Numerische Bereiche + kategoriale Gleichheit, kombiniert mit UND / ODER / muss-nicht.
Gruppieren Sie Ihre Treffer nach beliebigem Feld, um die Form des Ergebnis-Satzes zu sehen.
Menschenlesbare Labels für Ihre numerischen Felder anhängen und danach abfragen.
Isolierte Sammlungen pro API-Key. Ein Server, viele Kunden.
Ein statisches Binary. Lokale Datei-Persistenz. Keine externe Datenbank, kein Cluster.
CSV-Batch (optional gzip) oder Streaming-JSON. Aktualisieren, löschen, kompaktieren.
Einsatzbereich
Wählen Sie anhand Ihrer Daten und Abfragen. Die folgende Übersicht beschreibt Pop-Search, keine pauschale Rangliste anderer Systeme.
| Aufgabe | Pop-Search |
|---|---|
| Strukturierte Datensätze | Numerische Felder und kategoriale Filter |
| Ähnliche Datensätze | Feldbasierte Nähe mit Score |
| Statistische Ausreißer | Z-Score für ein ausgewähltes numerisches Feld |
| Semantische Textsuche | Nicht der Schwerpunkt dieser Demo |
Laufzeit und Speicherbedarf hängen vom Datensatz, den Filtern und der Ergebnismenge ab. Der Playground ist eine Funktionsdemo, kein Vergleichsbenchmark.
Hardware
Die gesamte Engine ist ein statisches Binary mit lokaler Datei-Persistenz. Es läuft bequem auf einem kleinen VPS — der Art Box, die ein Dutzend kleine Services hostet — ohne JVM, ohne Cluster, ohne externe Datenbank und ohne GPU.
Das ist der komplette Footprint — und es ist noch Platz für den Rest des Stacks.
Schnellstart
Die Beispiele verwenden Ihre eigene Instanz und Ihren API-Schlüssel. Setzen Sie BASE und POP_API_KEY in Ihrer Shell. Für einen Test ohne Einrichtung nutzen Sie den Playground oben.
1. Sammlung erstellen — Felder deklarieren.
curl -s -H "X-Pop-Api-Key: $POP_API_KEY" $BASE/collections -H 'Content-Type: application/json' -d '{
"name": "products",
"fields": {
"price": { "type": "numeric", "min": 0.99, "max": 10000, "bins": 20, "log": true },
"rating": { "type": "numeric", "min": 0, "max": 5, "bins": 16 },
"category": { "type": "categorical", "levels": ["electronics","furniture","outdoor","kitchen"] }
}
}'
2. Datensätze importieren (JSON-Array, oder POST /collections/products/ingest/csv für Batch).
curl -s -H "X-Pop-Api-Key: $POP_API_KEY" $BASE/collections/products/records -H 'Content-Type: application/json' -d '[
{ "id": "e1", "price": 249.99, "rating": 4.6, "category": "electronics" },
{ "id": "e2", "price": 89.99, "rating": 4.2, "category": "electronics" }
]'
3. Suchen — numerischer Bereich + kategorialer Filter, verknüpft mit UND.
curl -s -H "X-Pop-Api-Key: $POP_API_KEY" $BASE/collections/products/search -H 'Content-Type: application/json' -d '{
"must": [ { "field": "price", "gte": 50, "lte": 500 }, { "field": "category", "eq": "electronics" } ],
"limit": 20, "with_values": true
}'
4. Ähnliche finden — die nächsten Datensätze zu einem gegebenen.
curl -s -H "X-Pop-Api-Key: $POP_API_KEY" $BASE/collections/products/similar -H 'Content-Type: application/json' -d '{
"record": { "price": 249.99, "rating": 4.6, "category": "electronics" },
"k": 10, "with_values": true
}'
5. Anomalien erkennen — statistische Ausreißer auf einem Feld.
curl -s -H "X-Pop-Api-Key: $POP_API_KEY" $BASE/collections/products/anomalies -H 'Content-Type: application/json' -d '{
"field": "price", "z": 2.5, "limit": 50
}'
API-Referenz
JSON rein, JSON raus. Alle Abfrage-Endpunkte nehmen einen JSON-Body. Fehler geben ein JSON
{ "error": "..." } mit passendem HTTP-Status zurück.
| Methode | Endpunkt | Was es macht |
|---|---|---|
| POST | /collections | Sammlung aus einer Feld-Spec erstellen |
| GET | /collections | Sammlungen des Aufrufers auflisten |
| GET | /collections/{name} | Sammlungs-Statistiken (Datensatzanzahl, bins pro Feld) |
| DEL | /collections/{name} | Sammlung löschen |
| POST | /collections/{name}/records | JSON-Array von Datensätzen importieren |
| GET | /collections/{name}/records/{id} | Einen Datensatz per ID abrufen |
| PATCH | /collections/{name}/records/{id} | Felder eines Datensatzes aktualisieren |
| DEL | /collections/{name}/records/{id} | Einen Datensatz löschen |
| POST | /collections/{name}/ingest/csv | CSV-Batch-Import (plain oder gzip) |
| POST | /collections/{name}/search | Bereichs- + UND/ODER/muss-nicht-Abfrage, Facetten, Sortierung |
| POST | /collections/{name}/similar | Nächste Datensätze zu einem gegebenen (mit Score) |
| POST | /collections/{name}/anomalies | Statistische Ausreißer auf einem numerischen Feld |
| PUT | /collections/{name}/labels | Menschenlesbare Labels für die Bereiche eines numerischen Feldes setzen |
| GET | /collections/{name}/labels | Feld-Labels abrufen |
| DEL | /collections/{name}/labels | Feld-Labels entfernen |
| POST | /collections/{name}/relearn | Feld-Statistiken nach Datenverschiebung neu aufbauen |
| POST | /collections/{name}/compact | Platz gelöschter Datensätze zurückgewinnen |
| GET | /health · /status · /metrics | Betriebs-Endpunkte |
Abfrage-Bedingungen unterstützen gte / lte (numerischer Bereich),
eq / neq / in (exakt oder Menge), label (Feld-Label), anomaly
(z-Schwelle) und exists (optionale Felder). Kombinieren mit must (UND), any (ODER),
must_not (ausschließen).