ORM中的搜索策略

问题描述:

我在查找有关在不同的ORM中处理搜索的信息。ORM中的搜索策略

目前我正在重新开发PHP中的一些旧应用程序,其中一个要求是:使所有或几乎所有内容都可搜索,因此用户只需输入“punkrock live”,应用程序即可找到视频剪辑,音乐曲目,评论,即将发生的事件,甚至用户评论标记为这种方式。

在环境中的一切是搜索的ORM需要支持此功能的方法有两种:

  • 提供的ORM
  • 提供大容量数据库检索手段的“R”的“O”侧一些索引API边

理想的解决方案将基于搜索的字符串返回现成的对象。 您是否知道任何可以完成这项工作的良好端到端解决方案,而不一定是使用PHP? 如果你处理类似的问题,那么听听你的经验是好的。东西比使用Lucene的语义网更是一路 oneliners,寿; - )*

我最近整合了Compass搜索引擎到Java EE 5应用程序。它基于Lucene Java,支持不同的ORM框架以及其他类型的模型,如XML或根本没有真正的模型;)

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

说到搜索,你有Lucene的力量在手。指南针然后为您提供模型对象的实例作为搜索结果。

这不是PHP,但是你说没有是PHP必然;)不知道这是否会有所帮助,但...

在行走1.3 Schema.xml文件,你可以指定您希望所有模型都能扩展您创建的“BaseModel”类。

在这种BaseModel,你要重新定义保存()方法是这样的:

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