google2mysql

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

  • #16
    Hier nicht, aber ich hatte in der Vergangenheit schon das Vergnügen, is aber auch egal.

    Ich würde mich freuen, wenn wir es schaffen könnten einen vernünftigen Umgangston zu finden, dein letzter Post klang da ja schon relativ vielversprechend.

    Ich weiß nicht, ob man in Begriffe wie Vorlaut, Geplapper, Getrolle und "du behauptest" noch viel reininterpretieren muß.

    Auf den ersten Blick habe ich kein AND, OR, NOT gesehen, aber bevor ich mir da jetzt großartig Arbeit mache, muß ich morgen erstmal meinen Chef fragen, ob das reichen könnte, ich kann mir allerdings nicht vorstellen, daß er diese MySQL-Funktion nicht kannte.

    Kommentar


    • #17
      Wahrscheinlich unter dem falschen Stichwort gesucht
      logische Operatoren

      Gruss

      tobi

      p.s. das sind keine Funktionen *klugscheiss*
      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

      Kommentar


      • #18
        Logische Operatoren kenne ich ,
        mir kommt es aber, ohne es ausprobiert zu haben, so vor, als ob diese innerhalb einer phrase beim Modifizierer IN BOOLEAN MODE nicht erlaubt wären.
        Egal, wenn Cheffe sagt is ok, werd ich mich mal intensiv mit diesem Thema beschäftigen.
        Danke auf jeden Fall im Namen meines Forums, dessen SuFu wird sich freuen.

        Kommentar


        • #19
          Original geschrieben von Happy Nihilist
          Bis auf onemorenerd ist hier keiner Moderator.
          Ich bin kein Moderator.

          Eine boolesche Volltextsuche kann z.B. so aussehen:
          PHP-Code:
          $sql "SELECT * FROM table "
                
          ."WHERE MATCH({columnlist}) "
                
          ."AGAINST('".mysql_real_escape_string($_GET['search'])."' IN BOOLEAN MODE)"
          Nachteil: MATCH liefert IN BOOLEAN MODE nur 0 oder 1, eine Bewertung der Relevanz findet nicht statt.
          Und selbstverständlich muß ein ein Index FULLTEXT({columnlist}) existieren, also einer über genau die Spalten, in denen gesucht werden soll. Mehrere Volltextindizes oder einen über mehr als die benötigten Spalten kann MySQL nicht verwenden.

          Die Syntax des Suchausdrucks entspricht übrigens nicht genau der von Google.
          - Erweiterungen wie site:, filetype:, link: etc. kennt MySQL nicht.
          - MySQL kennt auch AND und OR nicht.
          - Google kennt imho die Operatoren <, > und ~ nicht.

          MySQLs boolesche Volltextsuche entspricht somit also nicht der Googlesyntax. Sie ist irgendwie sogar ziemlich weit entfernt davon. Dennoch ist sie sehr mächtig und für die Suchfunktion einer Webseite eigentlich ausreichend.

          Falls du es lieber exakt google-like haben möchtest, benutze Googles API.
          Zuletzt geändert von onemorenerd; 01.08.2006, 15:34.

          Kommentar


          • #20
            Hab das mal ausprobiert und dabei schon ein recht brauchbares Ergebnis erzielt, indem ich einfach AND, OR, NOT durch +, , - ersetzt habe.(Du weißt schon wie ichs meine^^)

            Nur ein Problem kann ich atm noch nicht lösen:
            Von einer Suchmaschiene bin ich es gewohnt, daß sie ein Wort nicht nur dann findet, wenn es Exakt da ist, sondern auch wenn es am Anfang, am Ende oder mitten in einem andern wort ist.
            Sprich: wenn ich nach "test" suche, bekomme ich auch "testweise", "funktionstest" und "autoteststrecke".
            Bei der Boolschen Suche finde ich höchstens test und testweise.
            Das ist irgendwie sehr unbefriedigend.

            So sieht mein Code aus bisher:
            PHP-Code:
            $sgb_suche=str_replace('AND ','+',$sgb_suche);
            $sgb_suche=str_replace(' OR ',' ',$sgb_suche);
            $sgb_suche=str_replace('NOT ','-',$sgb_suche);
            $array=explode(' ',$sgb_suche);
            foreach(
            $array as $item)
            {
                
            $item=stripslashes($item);
                if(
            substr($item,strlen($item)-1,1)!='"' && substr($item,0,1)!='"')$sgb_suche2.=' '.$item.'*';
                else {
                    
            $sgb_suche2.=' '.$item;
                }
            }
            $sgb_suche2=substr($sgb_suche2,1);
            $sql="SELECT * FROM ".$prefix."forum WHERE status!='deleted' &&  MATCH ($sgb_suche_spalte)
            AGAINST ('
            $sgb_suche2' IN BOOLEAN MODE) ORDER BY $sortierung1 $sortierung2 LIMIT $start,10"
            Jetzt stehe ich vor der Frage, auf was ich verzichten will:
            1. Die Operatoren und Phrasen der Boolschen Suche
            oder
            2. Die Zusätzlichen Treffer der normalen Suche mit LIKE

            Kommentar


            • #21
              Original geschrieben von Anti-Gothic
              ... wenn ich nach "test" suche, bekomme ich auch "testweise", "funktionstest" und "autoteststrecke".
              Bei der Boolschen Suche finde ich höchstens test und testweise.
              Kein Wunder, du hast es so programmiert.
              Und zwar hier:
              PHP-Code:
              $sgb_suche2.=' '.$item.'*'

              Kommentar


              • #22
                Ja klar, aber gibt es denn ne Möglichkeit,
                das besser zu machen? Der *-Operator kann leider nur angehängt werden, man kann ihn zwar auch vor ein Wort hängen, bringt aber nix.

                Kommentar


                • #23
                  Lies dazu am besten die Userkommentareauf http://dev.mysql.com/doc/refman/5.1/...t-boolean.html - aber es könnte deine Suche so langsam machen, dass du vielleicht doch lieber die Google-API nutzt.

                  Kommentar


                  • #24
                    Ist die Google API nicht für Suchanfragen AN Google gedacht

                    Soweit wie ich das hier nachvollziehen kann gehts um die Suche in einem eigenen Forum. Auch wenn ich jetzt nicht ganz verstehe warum der Syntax unbedingt genau gleich sein muss ...

                    Sry wenn ich´s überlesen hab, aber ich hab viel gescrollt als der Kleinkrieg los ging.
                    gruss Chris

                    [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

                    Kommentar


                    • #25
                      Richtig, die API ist ein Interface zu Google, d.h. man schickt User-Suchanfragen inklusive "site:example.com" hin und erhält Ergebnisse zurück, die man nach Belieben formatieren und ausgeben kann.
                      Selbstverständlich sucht Google nicht live auf der Seite sondern wie immer nur in seinem Index, mit dem Effekt, dass nur die Forumsbeiträge gefunden werden, die schon beim letzten Googlebot-Besuch existierten.

                      Kommentar


                      • #26
                        Ups, sry erstmal meinerseits, diesen Comment habsch übersehn.

                        Also, um es genau zu sagen, suche ich diese google2mysql-funktion für eine Mediendatenbank,
                        meine eigenes Forum freut sich natürlich auch.

                        Zur Not hätte ich auch mit dem einen Manko leben können,
                        aber mit der option dieses mit HAVING LIKE zu umgehn,
                        isses mir perfekt genug, bei Suchfunktionen kann man schließlich
                        allgemein mit einer gewissen Wartezit rechenen und leben.

                        Danke nochmals an alle, ich werde dann bald noch die komplette Funktion hier posten, denn ich denke die ist für viele Suchfunktionen gut zu gebrauchen.

                        Kommentar


                        • #27
                          So, das Problem, daß Sternchen nur am Ende eines Worts funktionieren,
                          konnte ich zwar nicht lösen, dafür aber die normale Volltextsuche mit der Boolschen kombinieren,
                          so daß mir nun wenigstens boolsche Operatoren plus scoring zur Verfügung stehen.

                          Hier mal der Code:
                          PHP-Code:
                          function google2sql($string$fields=''$table='')
                          {
                              if (
                          $table=='') {
                                  
                          $table='1_forum';
                              }
                              if (
                          $fields=='') {
                                  
                          $fields=array('text');
                              }
                              
                          $searchplace='';
                              foreach(
                          $fields as $field)$searchplace.=', '.$field;
                              
                          $searchplace=substr($searchplace,2);
                              
                          $string=str_replace('AND ','+',$string);
                              
                          $string=str_replace(' OR ',' ',$string);
                              
                          $string=str_replace('NOT ','-',$string);
                              
                          $array=explode(' ',$string);
                              foreach(
                          $array as $item)
                              {
                                  
                          $item=stripslashes($item);
                                  if(
                          substr($item,strlen($item)-1,1)!='"' && substr($item,0,1)!='"')$phrase.=' '.$item.'*';
                                  else {
                                      
                          $phrase.=' '.$item;
                                  }
                              }
                              
                          $phrase=substr($phrase,1);
                              
                          $sql="SELECT *, MATCH($searchplace) AGAINST ('$string') AS `score`
                              FROM 
                          $table WHERE status!='deleted' &&  MATCH ($searchplace)
                              AGAINST ('
                          $phrase' IN BOOLEAN MODE) ORDER BY score DESC LIMIT 10";
                              return 
                          $sql;
                          };

                          echo 
                          google2sql('soweit NOT test'); 

                          Kommentar

                          Lädt...
                          X