2009-06-11 5 views
2

Ich habe eine Postgres-Tabelle mit etwa 5 Millionen Datensätze und ich möchte die am nächsten passende Übereinstimmung mit einem Eingabeschlüssel finden. Ich habe versucht, Trigramme mit dem Modul pg_trgm zu verwenden, aber es dauerte ungefähr 5 Sekunden pro Abfrage, was für meine Bedürfnisse zu langsam ist.Gibt es eine postgres Fuzzy-Übereinstimmung schneller als pg_trgm?

Gibt es einen schnelleren Weg, Fuzzy-Match innerhalb von Postgres zu machen?

+0

Wie sind die Schlüssel strukturiert? alphanumerisch? nur int? –

+0

Der Index basiert auf einem Attribut vom Typ text. –

+0

Bitte zeigen Sie uns die Ausgabe von "explain analyze" Ihrer Anfrage. – Tometzky

Antwort

0

Soundex ist eine alternative Fuzzy-Match, aber es kann sehr Fuzzy sein. Ich würde bei der Triggerung bleiben, wenn du kannst. Gibt es ein anderes Kriterium, das Sie verwenden könnten, um die Trigrammsuche an einem kleineren Satz von Ergebnissen arbeiten zu lassen?

1

Es sieht so aus, als ob die Schätzungen der Ergebnisgröße in Ihrer EXPLAIN-Ausgabe weit entfernt sind. Dies ist nicht unerwartet, da es sehr schwierig ist, Ergebnisse der Volltextsuche gut zu schätzen.

Dies führt dazu, dass Postgresql einen fehlerhaften Abfrageplan verwendet. Versuchen Sie den Bitmap-Scan zu deaktivieren (setzen Sie enable_bitmapscan = off) und versuchen Sie es erneut.

0

Je nachdem, was Sie suchen, kann Postgres auch Übereinstimmungen mit regulären Ausdrücken anstelle der standardmäßigen "like" -Syntax durchführen. Es passt vielleicht besser zu dir.

Verwandte Themen