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

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

于 2013-06-12T12:46:24.267 回答