微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

美利通用户特定过滤

如何解决美利通用户特定过滤

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

如果用户进入搜索页面,他应该有一个带有 availableunavailable 的选择选项。如果用户选择可用,则应显示登录用户拥有的所有文章(来自 user_article 表)。如果用户选择不可用的所有其他文章,如果没有选择任何文章,则应显示所有文章。 如何添加过滤器/构面来过滤用户可用的文章

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

不允许对嵌套数组或对象进行过滤。

考虑到您可以拥有数千个用户,您如何处理此类特定于用户的过滤。

解决方法

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

您必须先对文章进行转换,然后才能将其发送到 meilisearch。

例如这样的事情 (this can be done in one sql query if you want that but this example will be sub-optimal for clarity)

$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不能做一个过滤器,你可以说“给我所有在“available_user”中不存在“username”的文章。因此,您必须在两个方面进行方面过滤。

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

然后在搜索过程中你应该做

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

当米歇尔想要他的所有可用文章时 和

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

当米歇尔想要他所有不可用的文章时。

original answer here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?