我正在尝试创建一个Books库应用程序。用户可以借很多书。一本书可以在其生命周期中借用许多用户。在ElasticSearch中,将有用户文档和书籍文档。如何搜索用户借用的所有图书?
如果我创建了一个用户手册文档,那么这本书的详细信息会在借书时重复多次。
如果我在Book文档中有一个数组列出了借用这本书的所有用户,那么该数组对于热门书籍来说将是巨大的。
哪个更好?还是有一个更简单,更好的解决方案,以上2?
答案 0 :(得分:1)
主要问题是恕我直言,你想搜索什么?
这意味着,如果您需要1和3,您将存储两次有关您图书的信息(一次是书本类型,另一次是用户类型)。
如果您需要添加有关借用日期和返回日期的信息,只需将其添加到“结帐”对象数组中即可。
我可能会这样设计......
{
"name":"david",
"birthdate":"1971-12-26",
"books":[
{
"title":"Star wars",
"author":"Georges Lucas",
"borrowdate":"2012-12-18",
"returndate":null
},
{
"title":"Star Trek",
"author":"Whatever his name",
"borrowdate":"2012-07-01",
"returndate":"2012-08-15"
}
]
}
有帮助吗?
大卫。
答案 1 :(得分:0)
在索引中创建三种类型,一种用于Books,一种用于User,一种用于结帐。分别使用“user”和“book”类型存储有关用户和书籍的信息。每次用户签出书籍时,使用“结帐”类型存储包含用户ID和书籍ID的文档。查询用户签出的所有书籍的签出类型以及签出书籍的所有用户。同时,用户和书籍的信息只存储一次。