似乎您试图找到一个解决方案来与 MeiliSearch 建立多对多关系。我们不是关系数据库,因此没有简单的解决方案:/
您必须先转换文章,然后再发送到 meilisearch。
例如这样的事情(如果你愿意,这可以在一个 sql 查询中完成,但为了清楚起见,这个例子不是最佳的)
$articles = db.execute("SELECT id, title from articles"0:
$users = db.execute(" SELECT id, username from articles"):
$user_article_bind = db.execute("SELECT article_id, user_id from user_article")
foreach ($articles as &$article) {
// using $article.id, loop over $user_article_bind to find all the user_id that have a connection with the current $article.id
// with the array of user_ids, loop over $users to transform the id list into username list
$article["available_user"][] = available_username_array
// something similar for unavailable_users
}
为了获得文章的这种结构,这些文章应该被索引到 meilisearch
{
"id": 1,
"title": "my article",
"available_user": ["john", "marie"],
"unavailable_user": ["Sophia", "michel"]
}
应该添加这两个键,因为 MeiliSearch 无法进行过滤,您可以说“给我所有在“可用用户”中不存在“用户名”的文章。所以你必须在两个方面都进行分面过滤。
因此,为此,请在设置的attributesForFaceting中添加两个键 ["available_user", "unavailable)user"
然后在搜索过程中你应该做
search.(“mysearch”, { facetFilters: [“available_user: michel”])
当 Michel 想要为他提供所有可用的文章时,
search.(“mysearch”, { facetFilters: [“unavailable_user: michel”])
当米歇尔想要他所有不可用的文章时。
原始答案在这里