0

Books ライブラリ アプリケーションを作成しようとしています。ユーザーは多くの本を借りることができます。本は一生のうちに多くの利用者に借りることができます。ElasticSearch には、ユーザー ドキュメントとブック ドキュメントがあります。ユーザーが借りたすべての本を検索するにはどうすればよいですか?

  1. ユーザーブック ドキュメントを作成すると、本の詳細が本を借りる回数だけ繰り返されます。

  2. 本を借りたすべてのユーザーを一覧表示する Book ドキュメントに配列がある場合、その配列は人気のある本では膨大になります。

どちらが良いですか?または、上記の2よりも簡単で優れた解決策はありますか?

4

2 に答える 2

1

主な質問は、私見ですが、何を検索したいですか?

  1. 書籍 (タイトル、ISBN...) を検索する場合は、書籍を保存します。
  2. ユーザー (名前、住所、都市など) を検索する場合は、ユーザーを保存します。
  3. 本を借りているユーザーを検索する場合は、ユーザーと借りた本の配列を保存します。

つまり、1 と 3 が必要な場合、ブックに関する情報を 2 回 (1 回はブック タイプで、もう 1 回はユーザー タイプで) 保存することになります。

借用日と返却日に関する情報を追加する必要がある場合は、それを「チェックアウト」オブジェクトの配列に追加するだけです。

多分こんな感じでデザインします…

{
  "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

インデックスに 3 つのタイプを作成します。1 つは書籍用、1 つはユーザー用、もう 1 つはチェックアウト用です。タイプ「user」と「book」をそれぞれ使用して、ユーザーとブックに関する情報を保存します。ユーザーが書籍をチェックアウトするたびに、タイプ「checkout」を使用して、ユーザー ID と書籍 ID を含むドキュメントを保存します。ユーザーがチェックアウトしたすべての書籍と、書籍をチェックアウトしたすべてのユーザーのチェックアウト タイプをクエリします。一方、ユーザーとブックの情報は一度だけ保存されます。

于 2012-12-18T05:37:48.650 に答える