Frage

Ich habe Property-Management-Anwendung von Tabellen aus:

tenants
landlords
units
properties
vendors-contacts

Im Grunde möchte ich ein Suchfeld, sie alle eher suchen als wählen, welche Kategorie ich bin auf der Suche. Wäre dies eine akzeptable Lösung sein (Technik weise?)

Will über 5 Tische Suche auf lange Sicht in Ordnung sein und den Server nicht bog nach unten? Was ist der beste Weg, um dies zu erreichen?

Mit PostgreSQL

War es hilfreich?

Lösung

Ich würde vorschlagen, eine spezielle Volltextindizierung Tool wie Lucene für diese Verwendung. Es wird wahrscheinlich einfacher sein, aufstehen und laufen, und das Ergebnis ist eine schnellere und featureful auch. Postgres Volltextindizes wird nützlich sein, wenn Sie auch strukturierte Suchfunktion oben auf dieser oder Transaktionalität Ihrer Suchindex brauchen, ist wichtig.

Wenn Sie dies nicht möchten, in der Datenbank implementieren, so etwas wie das folgende Schema funktionieren könnte, vorausgesetzt, Sie verwenden Ersatzschlüssel:

  1. für jede durchsuchbare Tabelle eine Ansicht erstellen, die Primärschlüsselspalte der Tabelle hat, den Namen der Tabelle und eine Verkettung aller durchsuchbaren Felder in dieser Tabelle.
  2. erstellen einen funktionellen GIN oder GiST Index auf dem über die to_tsvector Basiswert () der exakt gleiche Verkettung.
  3. erstellen UNION ALL über alle Ansichten, die die durchsuchbare Ansicht zu erstellen.

Danach können Sie die Suchanfragen wie dies tun können:

SELECT id, table_name, ts_rank_cd(body, query) AS rank
    FROM search_view, to_tsquery('search&words') query
    WHERE query @@ body
    ORDER BY rank DESC
    LIMIT 10;

Andere Tipps

Warum nicht eine Ansicht, die eine Vereinigung der Tabellen, die die Spalten aggregiert Sie in einem suchen auf mögen, und dann auf dieser aggregierten Spalte gesucht?

Sie können etwas tun:

select 'tenants:' + ltrim(str(t.Id)), <shared fields> from Tenants as t union
select 'landlords:' + ltrim(str(l.Id)), <shared fields> from Tenants as l union
...

Das erfordert eine gewisse Logik vom Client anfragende eingebettet werden; es muss wissen, wie der Schlüssel zu fabrizieren, dass es um schaut auf Single Feld zu suchen.

Das heißt, es ist wahrscheinlich besser, wenn Sie nur eine separate Spalte haben, die einen „Typ“ Wert enthält (zB Vermieter, Mieter) und filtern dann sowohl von der Art und der ID, wie es rechnerisch weniger teuer sein wird (und kann optimiert besser werden).

Sie möchten die Volltextsuche Built-in oder ein separates Produkt wie Lucene . Dies ist optimiert für unstrukturierte Suche über heterogene Daten.

Auch nicht vergessen, dass normale Indizes können nicht für something LIKE '%...%' verwendet werden. eine Volltextsuchmaschine auch effiziente Teilzeichenfolge sucht in der Lage zu tun.

Sie sollten in Ordnung sein, und es gibt wirklich keinen anderen gut (leicht) Weg, dies zu tun. Überprüfen Sie einfach die Felder, die Sie suchen auf sind zwar korrekt indiziert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top