Frage

Ich suche nach Informationen zum Umgang mit der Suche in verschiedenen ORMs.

Derzeit entwickle ich eine alte Anwendung in PHP neu und eine der Anforderungen ist:Machen Sie alles oder fast alles durchsuchbar, sodass der Benutzer einfach „Punkrock Live“ eingibt und die App so gekennzeichnete Videoclips, Musiktitel, Rezensionen, bevorstehende Veranstaltungen oder sogar Benutzerkommentare findet.

In einer Umgebung, in der alles durchsuchbar ist, muss ORM diese Funktion auf zwei Arten unterstützen:

  • Bereitstellung einer Indexierungs-API auf der „O“-Seite von ORM
  • Bereitstellung von Mitteln zum Massenabruf von Datenbanken auf der „R“-Seite

Die ideale Lösung würde fertige Objekte basierend auf der gesuchten Zeichenfolge zurückgeben.Kennen Sie gute End-to-End-Lösungen, die diese Aufgabe erfüllen, nicht unbedingt in PHP?Wenn Sie mit einem ähnlichen Problem zu kämpfen haben, wäre es schön, zuzuhören, welche Erfahrungen Sie gemacht haben.Etwas mehr als Verwenden Sie Lucene oder Semantisches Web ist der Weg Oneliner, allerdings ;-)*

War es hilfreich?

Lösung

Ich habe das kürzlich integriert Kompass Suchmaschine in eine Java EE 5-Anwendung.Es basiert auf Lucene Java und unterstützt verschiedene ORM-Frameworks sowie andere Modelltypen wie XML oder überhaupt kein echtes Modell ;)

Im Falle eines Objektmodells, das von einem ORM-Framework verwaltet wird, können Sie Ihre Klassen mit speziellen Annotationen versehen (z. B.@Searchable), registrieren Sie Ihre Klassen und lassen Sie Compass sie beim Start der Anwendung indizieren und automatisch auf Änderungen am Modell hören.

Wenn es um die Suche geht, steht Ihnen die Leistungsfähigkeit von Lucene zur Verfügung.Compass liefert Ihnen dann Instanzen Ihrer Modellobjekte als Suchergebnis.

Es ist kein PHP, aber Sie sagten, es müsse nicht unbedingt PHP sein ;) Ich weiß allerdings nicht, ob das hilft ...

Andere Tipps

In einer schema.xml-Datei von Propel 1.3 können Sie angeben, dass alle Ihre Modelle eine von Ihnen erstellte „BaseModel“-Klasse erweitern sollen.

In diesem BaseModel werden Sie die Methode save() so neu definieren, dass sie etwa so aussieht:

public function save(PropelPDO $con = null)
{
    if($this->getIsSearchable())
    {
             // update your search index here. Lucene, Sphinx, or otherwise
    }

    return parent::save($conn);
}

Dadurch wird sichergestellt, dass alles indiziert bleibt.Was die Suche angeht, würde ich vorschlagen, eine Suchklasse mit einigen Methoden zu erstellen.

class Search
{
   protected $_searchableTypes = array('music','video','blog');

   public method findAll($search_term)
   {
      $results = array();

      foreach($this->_searchableTypes as $type)
      {
         $results[] = $this->findType($type, $search_term);
      }

      return $results;
   }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top