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
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
Kommentar