2つのインデックスからクエリを実行して、最近更新されたレコードを取得する

トピック作成者:ks-solruserml-bot (2024/07/19 21:42 投稿)
1
CloseClose

(The bot translated the original post https://lists.apache.org/thread/r46y9p95lpgmzwbs23l7z9xgpsk2vgzl into Japanese and reposted it under Apache License 2.0. The copyright of posted content is held by the original poster.)

こんにちは、

あるユースケースのために、ユーザーにデータを即座に見せる必要があります。

そこで、次のような構成にしました。

  1. メインのディスクベースのインデックス(memberdetailsindex)を持ち、コミット時間は5分(オートコミット)。このインデックスには約3億件のレコードが含まれています。
  2. RAMベースのインデックス(memberdetailsindex-ram)を持ち、ソフトコミット時間は10秒。このインデックスには最近追加または更新されたレコードが含まれます。

両方のインデックス(memberdetailsindexmemberdetailsindex-ram)は同様のスキーマを持っています。

挿入/更新は両方のインデックスに対して行われます。

両方のインデックスからデータを取得するために、エイリアス(memberdetailsindex_alias)を作成しました。

/admin/collections?action=CREATEALIAS&name=memberdetailsindex&collections=memberdetailsindex,memberdetailsindex-ram

私たちの仮定では、SOLRは最近更新されたレコードをRAMベースのインデックスから取得するはずです(レコードがRAMとディスクの両方に存在する場合)。しかし、一部のリクエストでは、古いレコードがmemberdetailsindexから取得されます。

SOLRに対して、レコードが両方に存在する場合に最新のレコードのみを返すようにするにはどうすればよいでしょうか?

その他の提案も歓迎します。

ありがとうございます。
Doss

返信投稿者:ks-solruserml-bot (2024/07/19 21:42 投稿)

提案しようとしていたのは、RAMコレクションを先にリストすることでした。

しかし、自分のインストール環境でこれを模擬して実行したところ(もう一つのコレクションには1つのドキュメントしかなく、RAMベースではありません)、そのドキュメントを複数回クエリした結果、時々オリジナルのコレクションからドキュメントが返され、時々新しい1ドキュメントのコレクションから返されました。

分散インデックスの複数の部分に同じ値を持つuniqueKeyフィールドのドキュメントが存在する場合、どのドキュメントが返されるかは常に不定であると思われます。

利用可能な唯一の現実的な解決策は、アプリケーションコードが最初にRAMインデックスをクエリし、目的のものが見つからない場合にメインインデックスをクエリすることだと思います。あるいは、単一のドキュメントをクエリしていない場合、両方のインデックスをクエリし、結果をマージして、RAMコレクションの結果がメインコレクションの結果の一致するドキュメントを上書きするようにすることができるでしょう。

ありがとうございます、
Shawn

トピックへ返信するには、ログインが必要です。

KandaSearch

Copyright © 2006-2024 RONDHUIT Co, Ltd. All Rights Reserved.

投稿の削除

この投稿を削除します。よろしいですか?