phpbar.de logo

Mailinglisten-Archive

Re: Suchmaschine bauen
Archiv Mailingliste mysql-de

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Suchmaschine bauen



Christoph Kiehl schrieb:

> ich überlege gerade wie ich folgendes am geschicktesten löse:
> 
> Ich möchte in einem tabellenfeld nach 2 wörtern suchen und zwar mit OR
> verknüpft. Das ist ja noch einfach, aber jetzt hätte ich gerne das ich das
> Ergebnis so geordnet bekomme das die rows wo beide wörter enthalten sind
> ganz oben stehen, danach die mit einem wort und dann die mit 0 wörtern. Also
> das Prinzip einer Suchmaschine ... kann man das mit einem select-statement
> lösen? Ich hatte ja erst an REGEX gedacht, aber der gibt ja nicht zurück
> wieviele treffer es gab ...

Such mal auf dem TCX-Web-Server, ich meine mich erinnern zu können,
daß dort ein Textretrievalsystem liegt.

Grundsätzlich wird das System ohne spezielle Indexstrukturen aber nur
bei sehr kleinen Datenbanken vernünftig arbeiten, da keine
Indexstrukturen verwendet werden, wenn der Text z.B. mittels REGEX
gesucht wird.

Wenn Du Indices nutzen willst, unternimm folgendes:

a) Gibt den Dokumenten eine Kennummer

b) Zerlege alle Dokumente in einzelne Worte (muß in der
Client-Software unternommen werden)

c) Richte eine Tabelle für die Relation Kennung<->Wort ein.

d) Über diese Tabelle sollten die von Dir gewünschten Abfragen möglich
sein, wenn die Abfrage zu komplex wird, muß man sowas ggf. in der
Client-Software nachbearbeiten, d.h. Du liest die Kennungen zu Wort a
und dann die zu b und berechnest anschließend die gewünschte
Gesamtliste.

Die SQL-Abfrage für d) könnte in etwa so aussehen

SELECT Kennung,Count(*) FROM (
  SELECT Wort,Kennung FROM Wortliste WHERE Wort='a'

  UNION ALL

  SELECT Wort,Kennung FROM Wortliste WHERE Wort='b'
)

Ob das mit den Unterabfragen so geht weiß ich nicht sicher, das
Pronzip sollte aber klar sein.

Elmar


Home | Main Index | Thread Index

php::bar PHP Wiki   -   Listenarchive