Andreas Korthaus: Forums-Suche Nachtrag: Teilstrings finden?

Beitrag lesen

Hallo!

Bei einer mittleren Wortlänge der deutschen Sprache von etwa sieben Buchstaben und einer Mindestlänge der Einträge von drei Zeichen entstehen etwa fünfmal so viele Indexeinträge wie Worte. Bei dieser Technik bringt eine Stopwortliste übrigens fast nichts, weil sie überwiegend kurze Worte eliminieren würde, die oftmals schon an der geforderten Mindestlänge scheitern würden.

Weiß ich nicht, IMHO sind in deutsch sehr viele Worte mit 4 oder 5 Buchstaben in so einer Liste, das bringt zwar nicht so viel, aber machen sollte man das IMHO schon.

Beispiel: "Daniela" wird geindext als ["Daniela", "aniela", "niela", "iela", "ela"] - und mit einer Präfixsuche nach "nie" (LIKE "nie%" in SQL) in dieser Liste findet man nun sehr performant (mit Indexzugriff) "Daniela", was "nie" als Substring enthält.

Sollte mna nicht die ganze Suche mit LIKE machen? Also ohne den overhead  von z.B. mysqls match against?
Ich würde folgende Tabellen verwenden:

  • Tabelle mit den Suchworten und einer WortID
  • Tabelle mit allen Teilstrings mit zugeordneter WortID
  • Tabelle mit WortID und PostingID
  • Tabelle mit den 10.000 am häufigsten vorkommenden Worten, mit Ihrer Anzahl
  • Temporäre Tabelle zum Sortieren des Ergebnisses

Suchen dann wie folgt:
1. Ermitteln der Häufigkeit der Suchwörter
2a. Suche ohne Teilstrings: Abfrage gegen die "normale" Worte-Tabelle mit den Worten nach Häufigkeit in der Where-Bedingung ("= wort") geordnet, LEFT JOIN über wortID -> postingID
2b. Suche mit Teilstrings: Abfrage gegen die Teilstring-Tabelle mit den Worten nach Häufigkeit in der Where-Bedingung ("LIKE wort%") geordnet, LEFT JOIN über wortID -> postingID
3. obige Abfrage liefern je nachdem(da weiß ich noch nicht nach welcher Bedingung) entweder die Daten direkt, oder erstellen eine Temporäre Tabelle Daten
4. ggfs. Sortierung nach Zeit,Relevanz der temporären Tabelle -> Ausgabe der Daten

2 Fragen:
1. das ist doch in diesem Fall auf alle Fälle eien logarithmische Suche, oder? Eine lineare Suche wäre, wenn ich _alle_ Suchbegriffe (also nicht nur jeden einmal) in eine Tabelle schreibe, oder? Nur was sollte das Bringen? Was ich mir dann spare ist der LEFT JOIN. Wird die Abfrage dann durch diesen JOIN so langsam bei häufigem Vorkommen? Wörde sich dann noch ein 2c. lohnen, in dem man eine Tabelle mit allen Suchbegriffen linear durchsucht?

2. Was bringt eine Temporäre Tabelle? Dasselbe erreiche ich doch wenn ich die Daten ausgebe und eine Sortierung in der 3GL implementiere, oder?

Viel Grüße
Andreas

0 70

Wo liegen die Daten?

uepselon
  • zu diesem forum
  1. 0
    Stefan Muenz
    1. 0
      uepselon
      1. 0
        Michael Schröpl
        1. 0
          uepselon
          1. 0
            Thomas J.S.
            1. 0
              Michael Schröpl
            2. 0
              uepselon
              1. 0
                Michael Schröpl
                1. 0
                  uepselon
                  1. 0
                    Andreas Korthaus
                    1. 0
                      uepselon
            3. 0
              Andreas Korthaus
              1. 0
                Wilhelm
                1. 0
                  Andreas Korthaus
                  1. 0
                    Wilhelm
                  2. 0
                    Michael Schröpl
              2. 0
                Thomas J.S.
                1. 0
                  Andreas Korthaus
                  1. 0
                    Thomas J.S.
                    1. 0
                      Andreas Korthaus
                      1. 0
                        Thomas J.S.
                        1. 0
                          Andreas Korthaus
                      2. 0
                        Michael Schröpl
                        1. 0
                          Daniela Koller
                          1. 0
                            Michael Schröpl
                            1. 0
                              Andreas Korthaus
                              1. 0
                                Daniela Koller
                                1. 0
                                  Andreas Korthaus
                                  1. 0
                                    Daniela Koller
                                    1. 0
                                      Andreas Korthaus
                                      1. 0

                                        Forums-Suche Nachtrag: Teilstrings finden?

                                        Andreas Korthaus
                                        1. 0
                                          Daniela Koller
                                          1. 0
                                            Michael Schröpl
                                            1. 0
                                              Andreas Korthaus
                                      2. 0
                                        Daniela Koller
                                        1. 0
                                          Michael Schröpl
                                          1. 0
                                            Andreas Korthaus
                                            1. 0
                                              Michael Schröpl
                                              1. 0
                                                Andreas Korthaus
                                                1. 0
                                                  Andreas Korthaus
                                                2. 0
                                                  Michael Schröpl
                                              2. 0

                                                Archiv-Suche - wo ist das Archiv des Jahres 1998?

                                                Christian Seiler
                                                1. 0
                                                  Michael Schröpl
                                                  1. 0
                                                    Michael Schröpl
                                                    1. 0
                                                      Andreas Korthaus
                                    2. 0
                                      Michael Schröpl
                    2. 0
                      uepselon
                      1. 0
                        Thomas J.S.
                        1. 0
                          uepselon
                          1. 0
                            Thomas J.S.
                            1. 0
                              uepselon
                  2. 0
                    Michael Schröpl
                2. 0
                  Christian Seiler
                  1. 0
                    Thomas J.S.
                    1. 0
                      Christian Seiler
          2. 0
            Sven Rautenberg
          3. 0
            Michael Schröpl
            1. 0
              uepselon
              1. 0
                Michael Schröpl
                1. 0
                  Thomas J.S.
      2. 0
        Zapp
        1. 0
          uepselon
          1. 0
            uepselon
            1. 0
              Zapp
              1. 0
                uepselon
                1. 0
                  Zapp
      3. 0
        Stefan Muenz
  2. 0
    Achim Schrepfer
    1. 0
      uepselon