Ich bin ziemlich neu in Datenbanken, und bin auf der Suche nach einem hohen Niveau Beratung.Postgres Large Text Search Beratung
Die Situation
Ich baue eine Datenbank Postgres 9.3, in der Datenbank ist eine Tabelle, in der ich Log-Dateien speichern.
CREATE TABLE errorlogs (
id SERIAL PRIMARY KEY,
archive_id INTEGER NOT NULL REFERENCES archives,
filename VARCHAR(256) NOT NULL,
content TEXT);
Der Text in Inhalt in der Länge von 1k bis 50MB überall variieren kann.
Das Problem
Ich mag würde in der Lage sein einigermaßen schnellen Textsuche auf den Daten innerhalb der „Inhalt“ Spalte ausführen (zB WHERE CONTENT LIKE '% some_error%). Derzeit sind die Suchvorgänge sehr langsam (> 10 Minuten, um 8206 Zeilen zu durchsuchen).
Ich weiß, dass die Indizierung die Lösung für mein Problem sein soll, aber ich kann anscheinend keine Indizes erstellen - wenn ich versuche, bekomme ich Fehler, dass der Index zu groß wäre.
=# CREATE INDEX error_logs_content_idx ON errorlogs (content text_pattern_ops);
ERROR: index row requires 1796232 bytes, maximum size is 8191
Ich hoffte auf einen Ratschlag, wie man dieses Problem umgehen kann. Kann ich die maximale Indexgröße ändern? Oder sollte ich nicht versuchen, Postgres für die Volltextsuche in so großen Textfeldern zu verwenden?
Jeder Rat wird sehr geschätzt!
Ich glaube, Sie wahrscheinlich suchen Volltextsuche/Indizierung http://www.postgresql.org/docs/9.1/static/textsearch-intro.html. –
Diese Antwort könnte auch helfen, http://stackoverflow.com/questions/1566717/postgresql-like-query-performance-variations/13452528#13452528 –
Hallo John, danke für den Rat. Ich habe die Textsuchdokumente bereits durchgelesen und konnte keine Informationen zu den Indexeinschränkungen finden.Der zweite Kommentar, den Sie gepostet haben, beschreibt die Erstellung eines text_pattern_ops-Indexes, der, wie oben erwähnt, einen Fehler über den Index zurückgibt, der zu groß ist. – JBeFat