美丽搜索用户特定过滤



我有三个表,如usersarticlesuser_articleusers表格不言自明。在articles中,我有很多条目,例如20k。在user_article中,我有用户拥有的条目。

如果用户转到搜索页面,他应该有一个带有availableunavailable的选择选项。如果用户选择可用,则应显示登录用户拥有的所有文章(来自user_article表(。如果用户选择了不可用的所有其他文章,并且如果没有选择任何内容,则应显示所有文章。我如何添加过滤器/方面来过滤用户可用的文章?

主要想法是用一个数组来扩展toSearchableArray((,该数组包含用户拥有文章的信息,但在文档中是这样的信息:

不允许对嵌套数组或对象进行筛选。

考虑到可能有数千个用户,您如何处理这种特定于用户的过滤。

您似乎试图找到一个解决方案来与MeriliSearch建立多对多关系。我们不是关系数据库,因此没有简单的解决方案:/

在发送到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"]
}

这两个键都应该添加,因为MeriSearch不能做一个过滤器,你可以说"给我所有在"available_user"中没有"username"的文章。"。因此,您将不得不在两个方面进行分面过滤。

因此,要做到这一点,请在设置中的attributesForFaceting中添加两个键["available _user","unavailable(user">

然后在搜索过程中,你应该进行

search.(“mysearch”, { facetFilters: [“available_user: michel”]) 

当米歇尔想要所有可用的物品时和

search.(“mysearch”, { facetFilters: [“unavailable_user: michel”]) 

当米歇尔想要所有无法获得的文章给他时。

此处为原始答案

最新更新