我在 flex 搜索中存储了一组通知或信息项。用户看到通知后,我需要将其标记为该用户看到的。用户可以按已读/未读状态过滤文档。通知将被许多用户查看,可见状态将不断更新。什么是存储此数据的最佳方法。我应该将看到该通知的用户列表存储在同一文档中,还是应创建父子关系。
最佳答案
当然,应避免使用父子类型或嵌套类型,因为它们的计算量很大。实现与大量数据的关系的最佳方法是对数据进行非规范化并将其置于不同的索引中。请阅读here和here示例:
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/