elasticsearch - 如何存储有关用户已阅读哪些通知的信息?

标签 elasticsearch parent-child

我在 flex 搜索中存储了一组通知或信息项。用户看到通知后,我需要将其标记为该用户看到的。用户可以按已读/未读状态过滤文档。通知将被许多用户查看,可见状态将不断更新。什么是存储此数据的最佳方法。我应该将看到该通知的用户列表存储在同一文档中,还是应创建父子关系。

最佳答案

当然,应避免使用父子类型或嵌套类型,因为它们的计算量很大。实现与大量数据的关系的最佳方法是对数据进行非规范化并将其置于不同的索引中。请阅读herehere示例:

PUT notification
{"mappings": {
    "properties": {
          "content": {
               "type": "text"},
           "id_notification":{
                "type":"keyword" }{
                   }}
}
}

然后用户索引:
PUT user
{"mappings": {
    "properties": {
          "general_information": {
               "type": "text"},
           "id_user":{
                "type":"keyword" }{
                   }}
}
}

关系的另一个索引:
 PUT seen
{"mappings": {
    "properties": {
          "seen": {
               "notification_id":{
               "type": "keyword",
                "fields":{
                   "user_id":{
                "type":"keyword"}}},
           "unseen":{
               "notification_id":{
               "type": "keyword",
                "fields":{
                   "user_id":{
                "type":"keyword"}}}}
}
}

对不起,文本格式,我现在还没有基巴纳语。您应该注意,从信息索引(用户,通知)到支持索引(已查看),您应该进行多索引查询(即doc here)。之所以会起作用,是因为字段的名称和值(user_id,notification_id)在不同的索引中相同。可见索引中的user_id子字段是关键字数组。但是,您可以将user_id设为单个关键字,并使其作为notify_id关键字数组字段的父级。在每种情况下,它们都会保持一对多的关系,最佳选择取决于您的数据

关于elasticsearch - 如何存储有关用户已阅读哪些通知的信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60867705/

相关文章:

c# - ASP.NET MVC3 : Displaying Validation Errors from Child View in Parent View

elasticsearch - Elasticsearch:获取与父文档一起匹配的子代数

elasticsearch - Elasticsearch无法在一个命令中安装多个插件

ruby-on-rails - 如何仅对特定用户的记录执行 ElasticSearch 查询(Rails Tire gem)

c++ - 使用c++在windows中进行两种方式的父子通信

javascript - 使用 jquery 查找具有特定 id 值的子元素

python - Elasticsearch Python API删除方法

elasticsearch - ElasticSearch使用空格搜索带连字符的文本,而不是查询中的破折号

mysql - 子表在一对多更新过程中未更新

javascript - 从被单击元素的父元素中查找子元素