0

私のアプリでは、ユーザーはドキュメントをお気に入りに登録できます。Sphinx は、一致するドキュメントを検索できるようにするために使用されます。ユーザーがお気に入りを検索したい場合は、まずデータベース (mySQL) に直接アクセスしてドキュメント ID のリストを取得し、それを使用して sphinx で検索をフィルタリングします。擬似コードは次のようになります。

function searchFavoritesForUser($userId, $query) {
  $favoriteIds = getFavoriteIdsForUser($userId);
  $sphinx = new Sphinx(...);
  $sphinx->setFilter('document_id', $favoriteIds);
  return $sphinx->search($query);
}

ユーザーが妥当な数のお気に入りを持っている場合、これはうまく機能します。ユーザーが多数のお気に入りを持っている場合、お気に入りをロードすると大量のメモリが使用される可能性があり、sphinx でフィルターを設定するsearchd.

これらの構成値を調整できることはわかっていますが、これを設計するためのより良い方法があるに違いないようです。理想的には、お気に入りのドキュメント ID をすべてデータベースからメイン メモリにロードする必要があるステップをなくすことができます。

4

1 に答える 1

1

MVA (multi-value attribute)Sphinx インデックスを作成するときに、(doc_id、user_id) を持つ sphinx でお気に入りを作成し、Sphinx で直接検索できます。MySql にクエリを実行する必要はありません。

于 2013-06-12T12:46:24.267 に答える