Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Suche über einen Searchindex [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-webhosting
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Suche über einen Searchindex


 
Troublegum
05-02-2002, 00:09 
 
Hallo,


ich möchte eine Suche über einen Searchindex
ähnlich wie im vBulletin Board realisieren (nicht für ein Forum)
und dabei brauche ich Hilfe.
Dabei habe ich 2 Felder, die einzeln verknüpft (AND) durchsucht werden können.
Dabei möchte ich dem Benutzer die Suche mit logischen Operatoren (AND, OR, NOT) sowie die
Suche nach einem kompletten String ermöglichen.

Der Index ist folgendermaßen aufgebaut:
Er besteht aus einer Tabelle wordlist mit den Feldern wordid(int) und word(char).
Dort sind alle Wörter der zu durchsuchenden Inhalte definiert.
Zusätzlich gibt es noch 2 Tabellen, wo die Wörter den Treffern zugeordnet sind
(2 wegen den beiden Feldern, die durchsucht werden.)
1) index_titel mit den Feldern wordid(int) und lid(int) (die Id des Treffers)
2) index_artist mit den Felder wordid(int) und lid(int).

Nun gehts ans praktische.
Ich hatte folgenden Ansatz für die Suche nach einem einzelnen Feld:

Suchen der Wordids, nach denen gesucht wird:
SELECT wordid FROM index_wordlist WHERE word like '%QUERY%'
bzw.
SELECT wordid FROM index_wordlist WHERE word like '%Wort 1 der Query%' or word like '%Wort 2 der Query%' ... usw.

Suchen der Ergebnisse mit Hilfe der Wordids:
SELECT DISTINCT lid FROM index_artists WHERE wordid IN (Ergebnis der vorherigen Abfrage)


Das klappt bei folgendem Fällen auch wunderbar:
- Die Wörter der Query sind über AND verknüpft.


Ich hab aber keinen Plan, wie ich sinnvoll eine Suche mit OR, NOT oder gar die Suche nach einem kompletten String realisieren kann.
Im letzten Fall ist es ja wahrscheinlich noch schwieriger, da in der wordlist ja nur einzelne Wörter gespeichert sind.


Bei einer Verknüpfung der beiden Felder, die durchsucht werden können, frage ich genauso die Wordids ab (getrennt)
und dann mit folgender Query die Treffer:
SELECT a.lid FROM index_artists as a
LEFT JOIN index_titel as t ON t.lid=a.lid
WHERE a.wordid IN ($wordids_artists) AND t.wordid IN ($wordids_titel)

Damit werden ja die Treffer der beiden Felder mit einer UND Verknüpfung miteinerander
verknüpft. Also nur was sowohl in Titel als auch im Feld Artist gefunden wird, wird angezeigt ??



Mein Problem ist wie gesagt:
- Suche mit OR und NOT
- Suche nach komplettem String

 
Troublegum
05-02-2002, 15:29 
 
*push* - Schade, ist das zu schwer ?

 
Sky
05-02-2002, 15:55 
 
Auf Clientebene (wohl PHP): String an den Leerzeichen splitten und das Resultat als einzelnen Suchwörter behandeln. Spezielle Operatoren wie OR und AND extra berücksichtigen.

 
Troublegum
05-02-2002, 15:58 
 
Hallo Sky,

erstmal danke für deine Antwort.
Aber da komme ich leider nicht weiter.
Kannst du mir da nicht etwas genaueres sagen ?

 
Sky
05-02-2002, 16:05 
 
Brr... Da musst nen extra Parser dafür machen... Auch für Boolean-Grouping mit Klammern und dergleichen.
Ich sehe mich im Moment allerdings nicht imstande, mir sowas in 5 Minuten zu überlegen...
Das kannst du umgehen, indem du Google-Style-Tags machst, also z.B. +wort und -wort - AND und NOT kannst du so umsetzen, für OR musst die andere Lösung verwenden.

 
Troublegum
06-02-2002, 16:42 
 
OK, das mit AND, OR und NOT läuft jetzt einigermaßen.

Kann mir jemand mal sagen, ob es überhaupt möglich ist, ne Suche nach nem kompletten String über einen solchen Index zu machen, wo nur einzelne Wörter indexiert (heißt das so ?) sind ?

 
Sky
06-02-2002, 17:14 
 
Original geschrieben von André-Nam
OK, das mit AND, OR und NOT läuft jetzt einigermaßen.

Kann mir jemand mal sagen, ob es überhaupt möglich ist, ne Suche nach nem kompletten String über einen solchen Index zu machen, wo nur einzelne Wörter indexiert (heißt das so ?) sind ?

Zu 1) Lässt du uns an deiner Lösung auch teilhaben?
Zu 2) Sieht schlecht aus, bei so einer Struktur.

 
Troublegum
06-02-2002, 17:25 
 
Jo, ich habs aber abgeschaut vom vBulletin *schäm*. Da geht das ja so ähnlich.
Nun, mal schauen, was ich da mache.


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:41 Uhr.