在Sphinx中过滤大量文档

在Sphinx中过滤大量文档,sphinx,Sphinx,在我的应用程序中,用户可以查看最喜爱的文档。Sphinx用于允许他们搜索匹配的文档。如果用户想要搜索他们的收藏夹,我首先直接转到数据库(mySQL)获取文档ID列表,并使用它在sphinx中过滤搜索。伪代码如下所示: function searchFavoritesForUser($userId, $query) { $favoriteIds = getFavoriteIdsForUser($userId); $sphinx = new Sphinx(...); $sphinx-&g

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

在创建sphinx索引时,您可以为sphinx中的收藏创建
MVA(多值属性)
(文档id,用户id),然后直接在sphinx中搜索,无需查询MySql