Solr ドキュメント検索 | KandaSearch Community Support Forum

Solr ドキュメント検索

トピック作成者:ks-solruserml-bot (2025/10/24 18:59 投稿)
6
OpenOpen

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

こんにちは Solr コミュニティの皆さん、

現在、SolrCloud の UI から約 10 万件のドキュメントを一度に取得しようとしているのですが、その際に ロックエラー(lock errors) が発生してしまいます。
興味深いことに、小さなバッチでの取得は問題なく動作します。

cursorMark を使ったページネーションや /export リクエストハンドラの使用以外に、
UI から大量の結果セットを取得する際にエラーを回避するための推奨アプローチやベストプラクティス はありますか?

あらかじめ感謝します。

返信投稿者:ks-solruserml-bot (2025/10/24 18:59 投稿)

すべての結果を一度に取得する必要は通常ありません。
結果の一部を自動的に取得し、ページを繰り返し処理してすべての結果を取得するような小さなスクリプトを書くのはとても簡単です。

返信投稿者:ks-solruserml-bot (2025/10/24 19:00 投稿)

「UIで直接」とは具体的にどういう意味でしょうか?
Solrの管理UI(Admin UI)のことですか?それともあなたのアプリ用に作っている独自のUIのことですか?

あなたがすでに挙げた2つの機能(※cursorMark と /export リクエストハンドラー)は、まさにその目的のために設計されたものです。
それらに満足していない理由をもう少し詳しく説明してもらえますか?

また、他の「スクリプトで対応すればいい」という返信について補足しておくと、
その人はおそらく cursorMark に触れていない か、あるいは分散検索システムにおいて深いページングがどれほどコストがかかるかをまだ理解していないのだと思われます。


http://www.needhamsoftware.com(仕事用)
https://a.co/d/b2sZLD9(私のファンタジー小説)

返信投稿者:ks-solruserml-bot (2025/10/24 19:00 投稿)

忘れていたわけではありません。
元の投稿者(OP)がすでにそれについて言及していたので、すでに理解しているものと仮定していました。

返信投稿者:ks-solruserml-bot (2025/10/24 19:00 投稿)

Solr 管理 UI について質問しています。
知りたいのは、ページネーションやスクリプトを使わずに、UI から直接非常に多くのドキュメントを取得できるのかどうかという点です。

以前は、スタンドアロン(ユーザー管理型)の Solr を使用していたときには、10万件のドキュメントを一度に取得することができました。
しかし、SolrCloud に移行してからは、同じ方法ではうまくいきません。

そこで質問なのですが、
これは SolrCloud の設定に問題がある可能性があるのでしょうか?
それとも、SolrCloud の分散アーキテクチャ上、UI からこれほど大量のドキュメントを直接取得するのは推奨されていない、または不可能なのでしょうか?

ありがとうございます。

返信投稿者:ks-solruserml-bot (2025/10/24 19:01 投稿)

いろいろな問題に直面することになるでしょう。

  1. Solr 自体が、実際の結果数に関係なく、要求された行数分のメモリを事前に確保するため、非常に多くの結果を要求するとメモリ制限に引っかかります。
  2. Admin UI は極端に遅くなり、最悪の場合ブラウザがクラッシュする可能性があります。これは、その数の HTML 要素や CSS ルールを解析・表示しようとするためです。

— Andrew

返信投稿者:ks-solruserml-bot (2025/10/24 19:01 投稿)

Andrew の指摘に同意します。
Admin UI はトラブルシューティングや管理用途を想定しており、大量データ処理のループに組み込むことは推奨されません。

スタンドアロン版がどのくらい古いものかは書かれていませんが、もし古いものであれば、現在のようなシンタックスハイライト機能や操作性向上のための機能が追加される前のバージョンかもしれません。さらに、非常に古い場合は AngularJS ベースの UI 以前で、JavaScript やブラウザのメモリ使用量もずっと少なかった可能性があります。


緊急時に使える「一時的なハック」(推奨はされませんが、簡単に試せる方法)

これはブラウザの挙動やサーバーのメモリ状況によって成功するかどうかが変わります

  1. 通常どおりクエリを実行しますが、rows=10 に設定します。
  2. Admin UI のレスポンス表示欄の上にある URL をクリックします。
    • これにより、Admin UI なしで結果だけが表示される別ウィンドウが開き、クエリが再実行されます。
  3. その URL の rows パラメータを編集し、必要な件数に変更します。
  4. ブラウザが結果を色付きのシンタックスハイライトや折りたたみ構造で表示しようとする場合、処理が重くなることがあるため、その機能を無効化する必要があります。
  5. もしブラウザがボトルネックになっている場合は、URL(rows=10 のまま)をコピーして、curlwget などのコマンドラインツールで結果を取得する方法もあります。
    • ただし、これでも サーバーへの負荷は軽減されない ことに注意してください。

長期的に推奨される方法

この方法はあくまで一時しのぎです。
長期的には、次のいずれかの方法を採用するのが望ましいです。

  • cursorMark を使ったスクリプトで結果を順に取得する
  • /export リクエストハンドラを使用する(ただし、古いスキーマでは docValues が設定されていない場合があるので注意)

注意点:インデックス更新による不整合

システムが頻繁に更新されている場合、スクリプトの実行中に結果が不整合になる可能性があります。
以下のドキュメントで詳細が説明されています:

Solr は本質的に「最終的整合性 (eventually consistent)」を持つため、単一リクエストでもシャード間のコミット完了タイミングによって不整合が起こり得ます。
スクリプトによる逐次取得では時間がかかる分、そのリスクがさらに増します。
もし /export が利用できるなら、それが最も安全で確実な方法です。


http://www.needhamsoftware.com(仕事用)
https://a.co/d/b2sZLD9(私のファンタジー小説)

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

KandaSearch

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

投稿の削除

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