Zend Framework

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

  • Zend Framework

    Hallo,

    hab ein Problem (was auch sonst). Und zwar möchte ich die Volltextsuche des Zend Frameworks verwenden. Es gibt ja einige Tutorials für RSS Feeds. Das funktioniert auch soweit. Nu hab ich aber das Problem das ich auch andere Dokumente, wie z.B. Word, PDF usw indizieren muss.
    Leider bekomme ich das aber nicht hin. Für RSS Feeds gibt es eine import Funktion. So etwas finde ich aber nicht für andere Dokumente.
    Ich habe zwar die Volltextsuche für Zend_search_lucene schon gefunden, da ist die Indizirung allerdings in Java realisiert. Ich benötige sie aber in PHP. Gibt es überhaupt die Möglichkeit mittels der Zend_Search in php Dokumente zu indizieren, oder geht es garnicht?
    Für Hilfe wäre ich wirklich dankbar, bin schon Tage am rumforsten und kann nichts finden!!

    Danke für Antworten (auch gerne Links zum Thema, aber nicht die zur RSS indizierung, davon hab ich schon einige)!!!!

    Gruß

    Skull77

  • #2
    Re: Zend Framework

    Du solltest dich lieber an die Zend-Mailingliste wenden (fw-general@lists.zend.com), ist zwar Englisch, aber da sind die Programmierer von dem ZF wenigstens auch ansässig.
    Generell kann ich dir nur sagen, es ist alles noch nicht mal Version 1, wenn also was fehlt, bzw. du es nicht finden kannst, ist es wahrscheinlich, dass es noch nicht unterstützt wird (dafür reicht ja das angucken der Methoden)

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      Ok, hab jetzt mal versucht se anzuschreiben, hoffe die verstehen mein wirklich brillantes Englisch!!!

      Falls einer die Suche schon mal ausprobiert hat, wäre ich natürlich trotzdem dankbar, wenn er mir etwas unter die Arme greifen könnte.

      So halbwegs läuft es jetzt auch, bekomme aber komischerweise keine Suchergebnisse...

      Hier mal mein Code:

      PHP-Code:
      /*Die Indizierung scheint zu funktionieren. Zumindest werden die 
      entsprechenden Dateien erstellt und haben auch Inhalt.*/

          
      public function indizAction()
              {
              
      $index = new Zend_Search_Lucene('path/to/index'true);
              
              
      $filepath 'path/to/document/document.doc';
              
      $file fopen($filepath"r");
              
      $contents fread ($filefilesize ($filepath));
              
      fclose ($file);
              
              echo(
      $contents);
              
              
              
      $fileDate=date("d.m.Y",filemtime($filepath));
              echo(
      $fileDate);
              
      $author='Heinz Becker';
              
              
      $doc = new Zend_Search_Lucene_Document();        
              
      $doc->addField(Zend_Search_Lucene_Field::Text('path'$filepath));
              
      $doc->addField(Zend_Search_Lucene_Field::Text('modified'$fileDate));
              
      $doc->addField(Zend_Search_Lucene_Field::Keyword('author'$author));
              
      $doc->addField(Zend_Search_Lucene_Field::Text('contents'$contents));
              
              
      $index->addDocument($doc);
              
      $index->commit();
              }

      /*Die Suche ergibt keine übereinstimmung. Keine Ahnung woran 
      das liegen könnte*/
          
          
      public function searchAction()
          {                    
              
      $index = new Zend_Search_Lucene('/path/to/index');
              
      $query='dokumentenverwaltung';
              
              
      $hits $index->find($query);
              
              foreach (
      $hits as $hit) {
                  
      // gebe das Zend_Search_Lucene_Document Objekt für diesen Treffer zurück
                  
      echo $document $hit->getDocument();
              
                  
      // gebe ein Zend_Search_Lucene_Field Objekt vom Zend_Search_Lucene_Document zurück
                  
      echo $document->getField('path');
              
                  
      // gebe den Stringwert des Zend_Search_Lucene_Field Objekts zurück
                  
      echo $document->getFieldValue('path');
              }
              
          } 
      Zuletzt geändert von Skull77; 08.08.2006, 14:48.

      Kommentar


      • #4
        Ok, soweit geht es jetzt. Scheint probleme mit dem Word doc zu haben . Mit ner normalen txt gehts scheinbar. Eigenartig das!!!

        Kommentar


        • #5
          Für den Fall das auch sonst mal jemand sich mit dem Zend Framework und im Speziellen mit Zend_Search beschäftigen muss, hier die Lösung zu meinem Problem:

          Zend kommt übrigens nur mit ASCII zurecht!!! z.B. PDFs müssten konvertiert werden. Dazu unten mehr.

          PHP-Code:
              public function indizAction()
                  {
                  
                  
          //indizieren von Dateien
                  
          if(file_exists('d:/search_Test'))
                  {
                      
          $index = new Zend_Search_Lucene('d:/search_Test');
                      echo(
          'Index wird aktualisiert.<br><br>');
                  }
                  else
                  {
                      
          $index = new Zend_Search_Lucene('d:/search_Test'true);
                      echo(
          'Neuer Index wurde erstellt.<br><br>');
                  }
                  
                  
          //um die Indizierung zu testen einfach mal drei Dateien genommen
                  //information retrieval.txt und informa.txt sind gleich
                  //dokument.pdf wurde mit XPDF zu dokument.txt konvertiert
                  //informa.doc wurde mit antiword zu informa.txt konvertiert
                  
          $aFilepath = Array ('d:/suchdat/information retrieval.txt',
                                      
          'd:/suchdat/dokument.txt'
                                      
          'd:/suchdat/informa.txt');
                  
                  foreach(
          $aFilepath as $filepath)
                      {
                      
          $file fopen($filepath'r');
                      
          $contents fread ($filefilesize ($filepath));
                      
          fclose ($file);
                      
                      echo(
          $contents);
                      
                      
          $fileDate=date("d.m.Y",filemtime($filepath));
                      
                      
          //echo($fileDate);
                      
                      //Autor des Dokumentes
                      
          $author='Heinz Becker';
                      
                      
          //neues Dokument wird indiziert
                      
          $doc = new Zend_Search_Lucene_Document();
                      
          //Felder werden angelegt        
                      
          $doc->addField(Zend_Search_Lucene_Field::Text('path'$filepath));
                      
          $doc->addField(Zend_Search_Lucene_Field::Text('modified'$fileDate));
                      
          $doc->addField(Zend_Search_Lucene_Field::Keyword('author'$author));
                      
          $doc->addField(Zend_Search_Lucene_Field::Text('contents'$contents));
                      
                      
          //Dokument wird $index hinzugefügt
                      
          $index->addDocument($doc);
                      }    
                  
          //nu kommt alles in die Indexdateien
                  //für jedes commit werden neue Dateien angelegt, darum erst alles in $index und 
                  //zum Ende commiten.
                  
          $index->commit();
                  
                  echo 
          $index->count()."<br><br> Documents indexed.\n";
                  }
              
              public function 
          searchAction()
              {                    
                  
          $index = new Zend_Search_Lucene('/search_Test');
                  
                  
          //Suchwort
                  //muss klein geschrieben werden.
                  
          $query='controller';
                  
                  
          $hits $index->find($query);
                  
                  if(
          $hits == NULL)
                  {
                      echo(
          'Es konnten keine Übereinstimmungen gefunden werden.<br><br>');
                  }
                  
                  foreach (
          $hits as $hit) {
                      echo 
          $hit->score;
                      echo 
          "<br>" .$hit->path;
                      echo 
          "<br>" .$hit->modified;
                      echo 
          "<br>" .$hit->author;
                      echo 
          "<br><br>";
                  }
                  echo 
          $index->count()." Documents indexed.\n";
                  
              } 
          Zur Konvertierung der MS Word Dokumente habe ich "antiword" und zur Konvertierung von PDFs habe ich XPDF verwendet.
          Zuletzt geändert von Skull77; 09.08.2006, 17:27.

          Kommentar


          • #6
            Danke, endlich mal nen Snibbet, den man auch nachvollziehen kann.

            Kommentar


            • #7
              Original geschrieben von Skull77
              Zend kommt übrigens nur mit ASCII zurecht!!! z.B. PDFs müssten konvertiert werden. Dazu unten mehr.
              Ach ne... Sorry das ich den Thread erst jetzt lese, aber hast du dir noch nie eine DOC oder PDF Datei angeschaut?

              Folgendes sieht dein Script wenn du die DOC Datei mit fopen() öffnest:
              PHP-Code:
              Û~`{ÁvÖÎÞ.ÑNg·Åî”Ý#{¾}´}…ý€ý§ö¸‘j‡‡ÏþŠ™c1X6„Æfm“Ž;'_9    
              œr:œ8Ýq¦:‹ËœœO:ϸ8¸¤¹´¸ìu¹éJq»–»nv=ëúÌMà–ï¶ÊmÜí¾ÀR 4    ö
              n»3Ü£ÜkÜGݯz=Ä•[=¾ô„=ƒ<Ë=G</zÁ^Á^j¯_^—¼¡ÞZïQïBº0FX'Ü+
              œòáû¤útøŒû<öuñ-ôÝà{Ö÷µ__•ß˜ß-G”,ê}çïé/÷ñ¿ÀHh 8ðmWp[àŸƒ¸
              AiA«‚Ný#8
              $X¼?øAˆKHIÈ{!7Ä<q†¸Wüy(!46´-ôãÐaÁa†°ƒa†W†ï¿@°
              `lÁݧYÄŽˆÉH,²$òýÈÉ(Ç(YÔhÔ7ÑÎÑŠèÑ÷b<b*böÅ<Žõ‹ÕÇ~ûL&Y&
              9‡Ä%ÆuÇMÄs 
              GLORIA PERPETUA

              Kommentar

              Lädt...
              X