Suche über einen Searchindex

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Suche über einen Searchindex

    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



    Zuletzt geändert von Troublegum; 01.02.2004, 11:30.
    [color="#334D7B"]"Los, lass uns loslegen! Hm ? Quatschen können wir hinterher immer noch!"[/color]
    [color="#9C5245"]"Aber Bommel, wir können jetzt nicht bumsen. Wir müssen doch erst den Kindern - ... "[/color]
    [color="#334D7B"]"Ja ja ja. Du willst immer nur das Eine. Buchstabenzeigen, Buchstabenzeigen - meine Gefühle sind dir wohl scheißegal."[/color]

    © Harald Schmidt

  • #2
    *push* - Schade, ist das zu schwer ?
    [color="#334D7B"]"Los, lass uns loslegen! Hm ? Quatschen können wir hinterher immer noch!"[/color]
    [color="#9C5245"]"Aber Bommel, wir können jetzt nicht bumsen. Wir müssen doch erst den Kindern - ... "[/color]
    [color="#334D7B"]"Ja ja ja. Du willst immer nur das Eine. Buchstabenzeigen, Buchstabenzeigen - meine Gefühle sind dir wohl scheißegal."[/color]

    © Harald Schmidt

    Kommentar


    • #3
      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.

      CAT Music Files

      Kommentar


      • #4
        Hallo Sky,

        erstmal danke für deine Antwort.
        Aber da komme ich leider nicht weiter.
        Kannst du mir da nicht etwas genaueres sagen ?
        Zuletzt geändert von Troublegum; 01.02.2004, 11:31.
        [color="#334D7B"]"Los, lass uns loslegen! Hm ? Quatschen können wir hinterher immer noch!"[/color]
        [color="#9C5245"]"Aber Bommel, wir können jetzt nicht bumsen. Wir müssen doch erst den Kindern - ... "[/color]
        [color="#334D7B"]"Ja ja ja. Du willst immer nur das Eine. Buchstabenzeigen, Buchstabenzeigen - meine Gefühle sind dir wohl scheißegal."[/color]

        © Harald Schmidt

        Kommentar


        • #5
          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.

          CAT Music Files

          Kommentar


          • #6
            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 ?
            [color="#334D7B"]"Los, lass uns loslegen! Hm ? Quatschen können wir hinterher immer noch!"[/color]
            [color="#9C5245"]"Aber Bommel, wir können jetzt nicht bumsen. Wir müssen doch erst den Kindern - ... "[/color]
            [color="#334D7B"]"Ja ja ja. Du willst immer nur das Eine. Buchstabenzeigen, Buchstabenzeigen - meine Gefühle sind dir wohl scheißegal."[/color]

            © Harald Schmidt

            Kommentar


            • #7
              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.

              CAT Music Files

              Kommentar


              • #8
                Jo, ich habs aber abgeschaut vom vBulletin *schäm*. Da geht das ja so ähnlich.
                Nun, mal schauen, was ich da mache.
                [color="#334D7B"]"Los, lass uns loslegen! Hm ? Quatschen können wir hinterher immer noch!"[/color]
                [color="#9C5245"]"Aber Bommel, wir können jetzt nicht bumsen. Wir müssen doch erst den Kindern - ... "[/color]
                [color="#334D7B"]"Ja ja ja. Du willst immer nur das Eine. Buchstabenzeigen, Buchstabenzeigen - meine Gefühle sind dir wohl scheißegal."[/color]

                © Harald Schmidt

                Kommentar

                Lädt...
                X