Search ORMs中的搜索策略

Search ORMs中的搜索策略,search,orm,doctrine,propel,Search,Orm,Doctrine,Propel,我正在寻找在不同的ORM中处理搜索的信息 目前,我正在用PHP重新开发一些旧的应用程序,其中一个要求是:让所有或几乎所有的东西都可以搜索,所以用户只需键入“punkrock live”,应用程序就可以找到视频剪辑、音乐曲目、评论、即将到来的事件,甚至用户评论 在所有内容都可搜索的环境中,ORM需要以两种方式支持此功能: 在ORM的“O”端提供一些索引API 提供在“R”端进行批量数据库检索的方法 理想的解决方案是根据搜索的字符串返回现成的对象。 您知道有什么好的端到端解决方案可以完成这项工作

我正在寻找在不同的ORM中处理搜索的信息

目前,我正在用PHP重新开发一些旧的应用程序,其中一个要求是:让所有或几乎所有的东西都可以搜索,所以用户只需键入“punkrock live”,应用程序就可以找到视频剪辑、音乐曲目、评论、即将到来的事件,甚至用户评论

在所有内容都可搜索的环境中,ORM需要以两种方式支持此功能:

  • 在ORM的“O”端提供一些索引API
  • 提供在“R”端进行批量数据库检索的方法
理想的解决方案是根据搜索的字符串返回现成的对象。 您知道有什么好的端到端解决方案可以完成这项工作,而不一定是用PHP实现的吗?
如果你处理过类似的问题,听听你的经验会很好。Oneliner的方式不仅仅是使用Lucene或语义网,tho;-)*

我最近将搜索引擎集成到了JavaEE5应用程序中。它基于并支持不同的ORM框架以及其他类型的模型,如XML,或者根本没有真正的模型;)

对于由ORM框架管理的对象模型,您可以使用特殊注释(例如@Searchable)对类进行注释,注册类,让Compass在应用程序启动时对其进行索引,并自动侦听对模型的更改

在搜索方面,你拥有Lucene的力量。Compass然后将模型对象的实例作为搜索结果提供给您


它不是PHP,但您说过它不一定是PHP;)不知道这是否有帮助,但是…

在推进1.3 schema.xml文件中,您可以指定希望所有模型扩展您创建的“BaseModel”类

在该BaseModel中,您将重新定义save()方法,如下所示:

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

    return parent::save($conn);
}
它负责将所有内容编入索引。至于搜索,我建议用一些方法创建一个搜索类

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;
   }
}