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

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

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

  • 在ORM的“ O”侧提供一些索引API
  • 提供在“ R”侧进行批量数据库检索的方法

理想的解决方案是根据搜索到的字符串返回现成的对象。 您是否知道有什么行之有效的端到端解决方案,而不一定是PHP? 如果您处理类似的问题,最好听听您的经验。 ;;)*之外,还有使用Use Lucene语义网的更多功能

===============>>#1 票数:2 已采纳

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

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

在搜索方面,您将拥有Lucene的强大功能。 然后,指南针为您提供模型对象的实例作为搜索结果。

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

===============>>#2 票数:1

在Propel 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);
}

这样可以确保所有内容都被索引。 至于搜索,建议您使用几种方法创建Search类。

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

  ask by Michał Rudnicki translate from so

未解决问题?本站智能推荐:

1回复

使用ORM在不在数据库中的表上的外键

我有一个静态表entry ,由几个数据库/网站共享。 静态,我的意思是数据被读取但从未被网站更新。 目前,所有网站都是从同一台服务器提供的,但可能会发生变化。 我想最大限度地减少为每个网站创建/维护此表的需要,因此我考虑将其转换为存储在所有网站都可以访问的共享库中的变量。 问题是
4回复

直接从MVC中的控制器使用ORM类,不好的做法?

我最近在我的CodeIgniter应用程序中深入研究使用ORM,而我所使用的是Propel。 现在,这给了我基本上使用Propels类作为'模型'的能力,但这是不好的实践? 所以我的控制器代码如下: 我想在继续开发我的应用程序之前解决这个问题。 如果你认为这是一个不好的做法,我
1回复

如何在Symfony中将ORM从Propel转换为Doctrine?

我使用Propel 1.2在Symfony中制作了项目,我想将其迁移到使用Doctrine 1.4。 我怎么能这样做才能尽可能少的bug。 有干净的方法吗? 它的假设是什么?
3回复

PHP:选择ORM进行将来的扩展和更改?

我来自Codeigniter MVC背景,我们已经使用了一段时间。 现在是时候为大型项目推出我们自己的框架了,但是我们现在进入数据库部分,立即感到有些困惑。 在Codeigniter中,我们对所有SQL数据库连接都使用了ActiveRecord,效果很好,但是由于它不是独立的部分,因此我们
4回复

RedBean ORM性能[关闭]

我想知道,Redbean ORM可以用于社交网络应用程序等面向性能的场景,即使多个用户同时提取数千个数据,它是否也很稳定? 另外我想知道Redbean是否会消耗更多的内存空间? 谁能提供Doctrine-Propel-Redbean的比较研究?
1回复

当字段值包含/或\\时,Propel ORM无法过滤

我正在尝试根据field1和field2值查找记录。 这是我的查询 $ field2有时可能会有奇怪的字符。 由于某些原因,无论何时$ field2包含\\或/ ,propel都无法检索记录并返回空结果。 如果我这样做(仅获得基于field1的所有记录,然后循环以匹配field
2回复

ORM无法处理组合关系-Poopy

因此,我研究了Doctrine,Propel和Eloquent,到目前为止,似乎没有一个人想考虑存在中间表的情况,该中间表在其他两个表之间具有混合关系。 http://s14.postimg.org/uoo8xt1sx/Screen_Shot_2013_07_29_at_2_50_47_P
1回复

PHP数据库编写性能PDO VS ORM

我们需要在mysql中快速插入记录,以便与其他数据库同步。 哪个执行更快的插入。 PHP PDO或一些ORM(推进/学说)
1回复

用学说搜索部分单词

我正在尝试使用codeigniter和学说进行全文搜索。 我的问题是,Doctrine仅对整个单词执行搜索。 例如,我要搜索“ mountain”,我得到的每个条目都带有“ mountain”字样。 但是,如果我搜索“ mount”,我什么也没得到。
1回复

将Sphinx搜索与ORM一起使用

我正在寻找在我们网站上实施Sphinx搜索的方法。 使用SphinxQL集成它对我来说更有意义,而不是必须包括新库等来做奇怪的事情,因为这与本地SQL相当接近。 但是,我担心我们可能最终不得不重新发明轮子,以便我们可以在系统中使用Sphinx。 为了防止这种情况,我想将Sphinx