Pregunta

Estoy buscando información sobre cómo manejar la búsqueda en diferentes ORM.

Actualmente estoy redesarrollando una aplicación antigua en PHP y uno de los requisitos es:haga que todo o casi todo se pueda buscar, de modo que el usuario simplemente escriba "punkrock live" y la aplicación encuentre clips de video, pistas de música, reseñas, próximos eventos o incluso comentarios de usuarios etiquetados de esa manera.

En un entorno donde todo se puede buscar, ORM debe admitir esta función de dos maneras:

  • proporcionando alguna API de indexación en el lado "O" de ORM
  • Proporcionar medios para la recuperación masiva de bases de datos en el lado "R".

La solución ideal devolvería objetos preparados según la cadena buscada.¿Conoce alguna buena solución de un extremo a otro que haga el trabajo, no necesariamente en PHP?Si tuvo un problema similar, sería bueno escuchar cuál es su experiencia.algo más que Utilice Lucene o la web semántica es el camino oneliners, aunque ;-)*

¿Fue útil?

Solución

Recientemente he integrado el Brújula motor de búsqueda en una aplicación Java EE 5.Está basado en Lucene Java y admite diferentes marcos ORM, así como otros tipos de modelos como XML o ningún modelo real;)

En el caso de un modelo de objetos administrado por un marco ORM, puede anotar sus clases con anotaciones especiales (p. ej.@Searchable), registre sus clases y deje que Compass las indexe al iniciar la aplicación y escuche los cambios en el modelo automáticamente.

Cuando se trata de buscar, tienes a mano el poder de Lucene.Luego, Compass le brinda instancias de los objetos de su modelo como resultado de la búsqueda.

No es PHP, pero dijiste que no tenía por qué ser PHP necesariamente;) Sin embargo, no sé si esto ayuda...

Otros consejos

En un archivo esquema.xml de Propel 1.3, puede especificar que desea que todos sus modelos extiendan una clase "BaseModel" que USTED cree.

En ese BaseModel, vas a redefinir el método save() para que sea algo como esto:

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

    return parent::save($conn);
}

Eso se encarga de mantener todo indexado.En cuanto a la búsqueda, sugeriría crear una clase de búsqueda con algunos métodos.

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;
   }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top