質問

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

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

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

  • ORM の「O」側にインデックス API を提供する
  • 「R」側でデータベースを一括検索する手段を提供します。

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

役に立ちましたか?

解決

最近統合しました 方位磁針 検索エンジンを Java EE 5 アプリケーションに組み込みます。に基づいています ルシーン・ジャワ さまざまな ORM フレームワークだけでなく、XML などの他のタイプのモデルもサポートしていますが、実際のモデルはまったくサポートしていません ;)

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

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

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

他のヒント

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;
   }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top