2008-08-22 4 views
1

私は異なるORMでの検索の処理についての情報を探しています。ORMの検索方法

現在、私はPHPで古いアプリケーションを再開発していますが、すべてのものを検索可能なものにすることで、ユーザーは単に「punkrock live」とタイプし、ビデオクリップ、音楽トラック、レビュー、ユーザーコメントはそのようにラベル付けされています。すべてが検索可能ORMである環境では

は、2つの方法でこの機能をサポートする必要があります。

  • は「R」の一括データベース検索のための手段を提供するORM
  • の「O」側にいくつかのインデックスAPIを提供します側

理想的な解決策は、検索された文字列に基づいて既製のオブジェクトを返すことです。 PHPを必ずしも必要とするわけではありません。 同様の問題に対処すると、あなたの経験が何であるかを聞くのが良いでしょう。何か以上使用のLuceneまたはセマンティックウェブが oneliners方法で、カントー; - )*

答えて

2

私は最近のJava EE 5アプリケーションにCompass検索エンジンを統合しています。これはLucene Javaに基づいており、異なるORMフレームワークやXMLのような他のタイプのモデル、あるいは全く実際のモデルをサポートしていません)

ORMフレームワークによって管理されるオブジェクトモデルの場合、注釈(例:@Searchable)、クラスを登録してコンパスにアプリケーションの起動時にインデックスを付け、モデルの変更を自動的に聞くことができます。

検索には、Luceneの力があります。 Compassはモデルオブジェクトのインスタンスを検索結果として提供します。

それはPHPではないですが、あなたはそれが必ずしもPHPである必要はありませんでした。このことができます場合は)知ってはいけない、しかし...

1

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