0

オブジェクト「Questions」と「Users」の 2 つのセットがあり、それらが関係を共有しているとします。

lucene インデックスを作成するとき、これら 2 つのオブジェクトを個別にインデックス化できます。つまり、質問ごとのドキュメントとユーザーごとのドキュメントです。

または、質問からのプロパティを持つデータ転送オブジェクトを作成し、ユーザーが単一のオブジェクトにフラット化し、このデータ転送オブジェクトにインデックスを付けることができます。

検索を実行するとき、質問のタイトルと質問の作成者だけで検索できるとしましょう。

何らかの理由で、システムでユーザーが自分の表示名を変更できるとします。

オブジェクトにインデックスを付けて最新の変更を lucene idex に反映できるようにする最善の方法は何ですか?

  1. ユーザー用と質問用に別々のドキュメントを作成し、必要な質問/ユーザーの詳細を必要に応じて lucene に取得させる必要がありますか?
  2. または、データ転送オブジェクトの方法に進みますか? 変更があった場合、これらのドキュメントを削除してインデックスを再作成しますか?
4

2 に答える 2

2

1 つは質問別のユーザー用、もう 1 つはユーザー別の質問用の 2 つのインデックスを作成します。実行する必要がある検索によっては、両方が役立つ場合があります。

質問を読み直して、ユーザーが自分の名前を更新するときに必要なことは、ユーザーが持っているドキュメントを取得して更新するために lucene クエリを実行することです。インデックス作成の方法によっては、その変更が非常に迅速に反映される可能性があります。

于 2012-05-11T03:13:04.240 に答える
0

プライマリ オブジェクト ID は、アイテムが最初にインポート/インデックス化されたときに関連付けられます。ユーザーが次にそのレコードを lucene にインポートするときに名前やその他のフィールドの値を変更すると、インデックス化されたレコードの更新を管理/チェックするロジックがない場合、新しいレコードが作成されます。あなたの名前の例は、このための完璧なシナリオです。

最初のアプローチでは、システム内のすべてのユーザーを保持します。その人が自分の名前を Bob として入力し、それを William に変更した場合、インデクサーは常にこれらを別のレコードとして表示するため、質問から離れた 2 つの名前が常にインデックスに表示されることになります。

重複を最小限に抑えたい場合は、インデックスを削除してデータのインデックスを再作成することをお勧めします。これにより、データの整合性が確保されます。そうしないと、オブジェクト ID が異なる重複レコード (つまり、新しいインデックス付きレコード) が表示される場合があります。

于 2012-05-10T12:44:21.767 に答える