Ich bin neu in diesem Bereich und ich frage mich hauptsächlich was der Stand der Technik ist und wo ich darüber lesen kann. Lassen Sie uns annehmen, dass ich nur einen Schlüssel/Wert-Speicher habe und irgendwie Abstand (key1, key2) definiert habe (nicht sicher, ob es eine Metrik sein muss, d. H. Ob die Dreiecksungleichung immer gelten muss).wie man unscharfe Suche in großen Daten macht
Was ich will, ist meist eine Suche (Schlüssel) -Funktion, die mir alle Elemente mit Schlüsseln bis zu einer bestimmten Entfernung zum Suchschlüssel zurückgibt. Vielleicht ist diese Distanzgrenze konfigurierbar. Vielleicht ist das auch nur ein langsamer Iterator. Vielleicht kann es auch ein Zähllimit geben und ein Item (Schlüssel, Wert) ist mit einer Wahrscheinlichkeit P in der zurückgegebenen Menge, wo P = 1/Entfernung (Schlüssel, Suchschlüssel) oder so (dh die perfekte Übereinstimmung wäre sicherlich in den Set- und Close-Matches zumindest mit hoher Wahrscheinlichkeit).
Eine beispielhafte Anwendung ist in MusicBrainz Fingerabdruckabgleich. Sie verwenden den AcoustId Fingerabdruck und haben this compare function definiert. Sie benutzen den PostgreSQL GIN Index und ich denke (obwohl ich den Acoustid-Server Code nicht vollständig verstanden/gelesen habe) die GIN Partial Match Algorithm, aber ich habe nicht ganz verstanden ob das ist was ich gefragt habe und wie es funktioniert.
Für Text, was ich bisher gefunden ist etwas phonetic algorithm zu verwenden Wörter auf ihre Aussprache zu vereinfachen basiert. Ein Beispiel ist here. Dies dient hauptsächlich dazu, den Suchraum auf einen kleineren Bereich zu reduzieren. Dies hat jedoch mehrere Einschränkungen, z. es muss immer noch eine perfekte Übereinstimmung auf kleinerem Raum sein.
Aber ich suche auch nach einer allgemeineren Lösung, wenn das existiert.
keine vollständige Antwort, aber haben Blick auf VP-Bäume (http://en.wikipedia.org/wiki/Vp-tree und http: // stevehanov .ca/blog/index.php? id = 130). Sie ermöglichen schnelle Abfragen in metrischen Räumen. –