0

我正在尝试创建一个图书库应用程序。一个用户可以借很多书。一本书在其生命周期内可以被许多用户借阅。在 ElasticSearch 中会有用户文档和书籍文档。如何搜索用户借阅的所有书籍?

  1. 如果我创建一个用户图书文档,那么图书详细信息将与图书借阅次数一样重复。

  2. 如果我在 Book 文档中有一个数组,列出了所有借书的用户,那么这个数组对于流行书籍来说将是巨大的。

哪个更好?还是有比上述2更简单更好的解决方案?

4

2 回答 2

1

主要问题是恕我直言,您要搜索什么?

  1. 如果要搜索书籍(标题、isbn...),请存储书籍。
  2. 如果要搜索用户(姓名、地址、城市...),请存储用户。
  3. 如果要搜索借书的用户,则存储一个用户和一组借书。

这意味着如果您需要 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"
    }
  ]
}

它有帮助吗?

大卫。

于 2012-12-18T12:33:16.457 回答
0

在您的索引中创建三种类型,一种用于书籍,一种用于用户,一种用于结帐。分别使用“user”和“book”类型存储有关用户和书籍的信息。每次用户签出一本书时,使用类型“checkout”存储一个包含用户 ID 和书籍 ID 的文档。查询一个用户所有借出的图书和所有已借出图书的用户的借出类型。同时,用户和书籍的信息只存储一次。

于 2012-12-18T05:37:48.650 回答