在我的应用程序中,用户可以收藏文档。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 从数据库加载到主内存中的步骤。