1

さまざまな ORM での検索の処理に関する情報を探しています。

現在、私は PHP でいくつかの古いアプリケーションを再開発しています。要件の 1 つは、すべてまたはほとんどすべてを検索可能にすることです。これにより、ユーザーは「パンクロック ライブ」と入力するだけで、アプリはビデオ クリップ、音楽トラック、レビュー、今後のイベント、さらにはそのラベルが付いたユーザー コメントを検索します。仕方。

すべてが検索可能な環境では、ORM はこの機能を 2 つの方法でサポートする必要があります。

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

理想的な解決策は、検索された文字列に基づいて既製のオブジェクトを返すことです。必ずしも PHP ではなく、仕事をする優れたエンドツーエンドのソリューションを知っていますか? 同様の問題に対処した場合は、あなたの経験が何であるかを聞いてください。Luceneまたはセマンティック Webを使用する以上の何かが、ワンライナーの方法です ;-)*

4

2 に答える 2

2

最近、Compass検索エンジンを Java EE 5 アプリケーションに統合しました。これはLucene Javaに基づいており、さまざまな ORM フレームワークだけでなく、XML などの他のタイプのモデルをサポートするか、実際のモデルをまったくサポートしません ;)

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

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

それは PHP ではありませんが、必ずしも PHP である必要はないとおっしゃいました ;) これが役立つかどうかはわかりませんが...

于 2008-08-22T16:05:16.197 に答える
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;
   }
}
于 2008-11-19T18:26:50.023 に答える