我正在尝试创建一个图书库应用程序。一个用户可以借很多书。一本书在其生命周期内可以被许多用户借阅。在 ElasticSearch 中会有用户文档和书籍文档。如何搜索用户借阅的所有书籍?
如果我创建一个用户图书文档,那么图书详细信息将与图书借阅次数一样重复。
如果我在 Book 文档中有一个数组,列出了所有借书的用户,那么这个数组对于流行书籍来说将是巨大的。
哪个更好?还是有比上述2更简单更好的解决方案?
我正在尝试创建一个图书库应用程序。一个用户可以借很多书。一本书在其生命周期内可以被许多用户借阅。在 ElasticSearch 中会有用户文档和书籍文档。如何搜索用户借阅的所有书籍?
如果我创建一个用户图书文档,那么图书详细信息将与图书借阅次数一样重复。
如果我在 Book 文档中有一个数组,列出了所有借书的用户,那么这个数组对于流行书籍来说将是巨大的。
哪个更好?还是有比上述2更简单更好的解决方案?
主要问题是恕我直言,您要搜索什么?
这意味着如果您需要 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"
}
]
}
它有帮助吗?
大卫。
在您的索引中创建三种类型,一种用于书籍,一种用于用户,一种用于结帐。分别使用“user”和“book”类型存储有关用户和书籍的信息。每次用户签出一本书时,使用类型“checkout”存储一个包含用户 ID 和书籍 ID 的文档。查询一个用户所有借出的图书和所有已借出图书的用户的借出类型。同时,用户和书籍的信息只存储一次。