私のアプリでは、ユーザーはドキュメントをお気に入りに登録できます。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 をすべてデータベースからメイン メモリにロードする必要があるステップをなくすことができます。