質問: RDBと全文検索エンジンを連携させるにあたって、 全文情報が更新される度に主キーと全文を全文検索エンジンに登録させて、 検索時はSQLのWHERE条件に全文検索エンジンの検索結果として出てきた主キー情報をIN句として追加する、という方法でやっているのですが、 基本的にはこの実装方法でやるものなのでしょうか? 例えば全文の結果が10000件だったら10000件カンマ区切りでIN句に条件を指定する、という感じになっちゃうのがちょっと気持ち悪く感じちゃうのですが......
回答: > > 検索時はSQLのWHERE条件に全文検索エンジンの検索結果として出てきた主キー情報をIN句として追加する、という方法でやっているのですが、 > > > 検索エンジン(CloudSearch) に「検索」だけでなく、「表示/利用する」データを全て持たせて、検索結果としてそのまま利用するという方法はあると思います。 ただその場合 * DBと検索エンジンを、データの削除も含めて同期する必要がある * 表示/利用の一部を修正したい場合でも検索エンジンのスキーマを変更しなければならない などのあまり嬉しくない点があります。IDだけ取ってきて、DBから再取得する方が、データの存在チェックや、検索結果のカスタマイズがしやすいと私は思っています。 この辺は、パフォーマンスをどれ程求めるのかによっても判断が分かれるところだと思います。 > > 例えば全文の結果が10000件だったら10000件カンマ区切りでIN句に条件を指定する、という感じになっちゃうのがちょっと気持ち悪く感じちゃうのですが...... > > > Webサイトのサイト内検索などの場合、「10000件」を一気にとってくることは、表示上まずありえないので、ページ分割(1回100件単位くらいで検索結果を取得)などをします、10000件も一気にIN句渡すようなことはあまりないかなという印象です。 CloudSearchのページ分割についての参考URLです。