在Sphinx中过滤大量文档

时间:2013-06-10 15:53:01

标签: sphinx

在我的应用中,用户可以收藏文档。 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中再次运行various limits

我意识到我可以调整这些配置值,但似乎必须有更好的方法来设计它。理想情况下,我可以消除我必须将数据库中所有喜欢的文档ID加载到主内存中的步骤。

1 个答案:

答案 0 :(得分:1)

在创建sphinx索引时,您可以为sphinx中的收藏夹(doc_id,user_id)创建MVA (multi-value attribute),然后直接在sphinx中搜索,无需查询MySql。