Suche in den Suchergebnissen (erweiterte Suche)

Suche in den Suchergebnissen (erweiterte Suche)

am 23.09.2004 09:28:51 von tarazi

Hallo,

Suche in der Suche:

Ich möchte eine Suche in der Suche realisieren. D.h. such nach einen
Produktbegriff z.B. 'maschinenbau' suchen und dann die Suchergebnisse
anzeigen lassen. Das ist ja kein Problem. O.k., nun soll dem User eine
sogenannte "Erweiterte Suche" ermöglicht werden. Der User soll die
Suchergebnisse noch einmal filtern können, um so die Ergebnisse noch
mehr einzugrenzen. Zum Beispiel nur bestimmte Firmentypen,
Bundesländer,Plz etc.

Ich denke ich komme nicht herrum mir die Anfrage-Parameter in einem
Session-Array zu merken um so eine erneute Abfrage abzusetzen mit eben
den zusätzlichen Parametern. Oder kann ich ein Suchergebniss in einer
temporären Tabelle speichern und diese temporäre Tabelle durchsuchen?
(Schnelligkeit) Wenn das gehen würde, wäre das Problem ja vorhanden
eine Menge temporäre Tabellen auf dem Webserver zu haben und zu
verwalten.

Wer hat hierzu schon sein Erfahrungen gemacht und kann einige
wertvolle
Tipps oder Denkanstösse geben?

Ist das ein MySQL-Problem, oder hängt das mit der Programmierung der
Applikation zusammen, welche die DB abfragt?

[MySQL + PHP]

Danke,
Rania

Re: Suche in den Suchergebnissen (erweiterte Suche)

am 23.09.2004 10:37:46 von Markus Malkusch

R. Tarazi:

> Ich denke ich komme nicht herrum mir die Anfrage-Parameter in einem
> Session-Array zu merken um so eine erneute Abfrage abzusetzen mit eben
> den zusätzlichen Parametern.

Spontan wäre das die beste Lösung, die mir einfällt.

> Oder kann ich ein Suchergebniss in einer
> temporären Tabelle speichern und diese temporäre Tabelle durchsuchen?

Sicher kannst Du das.

> (Schnelligkeit)

Eben nicht, weil Schnelligkeit beim Suchen erhältst Du nur, wenn Du auf 'nem
Index suchst. Den zu erzeugen dauert aber lange!

> Wenn das gehen würde, wäre das Problem ja vorhanden
> eine Menge temporäre Tabellen auf dem Webserver zu haben und zu
> verwalten.

Na und, niemand hindert Dich daran sie danach (oder per crond) zu löschen.
--
- Kontonummerprüfung mit PHP

Re: Suche in den Suchergebnissen (erweiterte Suche)

am 23.09.2004 21:45:27 von tarazi

Hi Markus,

> > Oder kann ich ein Suchergebniss in einer
> > temporären Tabelle speichern und diese temporäre Tabelle durchsuchen?
>
> Sicher kannst Du das.

Hmm, und wie geht das genau?

> > (Schnelligkeit)
>
> Eben nicht, weil Schnelligkeit beim Suchen erhältst Du nur, wenn Du auf 'nem
> Index suchst. Den zu erzeugen dauert aber lange!

Was genau meinst Du damit? Das das speichern von Suchergebnissen in
temporären Tabellen zwar gehen würde, aber noch langsamer wäre als
eine neue Suchabfrage mit eben erweiterten Parametern?

> > Wenn das gehen würde, wäre das Problem ja vorhanden
> > eine Menge temporäre Tabellen auf dem Webserver zu haben und zu
> > verwalten.
>
> Na und, niemand hindert Dich daran sie danach (oder per crond) zu löschen.

Das habe ich auch noch nicht verstanden. Wo genau werden die
temp-Tabellen dann gespeichert.


Besten Dank für Deine Hilfe,
Rania

Re: Suche in den Suchergebnissen (erweiterte Suche)

am 23.09.2004 23:27:31 von Markus Malkusch

R. Tarazi:

>>> Oder kann ich ein Suchergebniss in einer
>>> temporären Tabelle speichern und diese temporäre Tabelle durchsuchen?

[..]

> Hmm, und wie geht das genau?

Benutzt Du mySQL? Dann hier:


Ansonsten befrage die Doku Deines RDBMS.

> Was genau meinst Du damit? Das das speichern von Suchergebnissen in
> temporären Tabellen zwar gehen würde, aber noch langsamer wäre als
> eine neue Suchabfrage mit eben erweiterten Parametern?

Stringmatching ist nur begrenzt effizient. Darum kann man einen Index
erstellen, um dann wirklich effizient zu suchen. Nur das Erstellen dieses
Indexes ist je nach Datenstruktur aufwändiger als ein Stringmatching.

Also im Prinzip machst Du folgendes: Du gehst durch den ganzen String und
baust daraus den Index. Dann suchst Du im Index (das geht schnell). D.h. Du
gehst einmal komplett durch den String und baust noch. Bei vielen Bäumen
muss beim Bauen rotiert werden, was aufwendig sein kann.

Stattdessen kannst Du auch nur im String ohne Index suchen. Da gehst Du auch
nicht öfters als einmal durch, hast aber keinen Indexbau mehr.

Ich würde Dir empfehlen die Idee mit dem Einwegindex zu verwerfen und
stattdessen den vorhandenen Index nochmal zu durchsuchen. Das dürfte auch
schneller gehen als den gefundenen String /linear/ (OK man kann im String
hüpfen) zu durchwühlen.

Das ist jetzt aber nur mal IMO (ich kenne mich mit keinem einzigem RDBMS im
Inneren aus). Die Datenbankexperten in dc.datenbanken.* können da sicher
genaueres sagen.
--
- Kontonummerprüfung mit PHP