/api/cores や /solr/admin/cores がすべてのコアのロードを待ってからのみ返すようにする方法についてはどうすればよいでしょうか?

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

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

/api/cores や /solr/admin/cores は、それらが呼び出されたSolrインスタンスのすべてのコアの現在の状態に関する非常に有用な情報を返します。

ただし、Solrインスタンスが再起動したばかりの場合、これらの呼び出しは以下のように空の応答を返すか、または現時点でロードされているコアのみを含んだ応答を返します。すべてのコアがロードされるまで待機させる方法はありますか?

空の応答:

{
  "responseHeader": {
    "status": 0,
    "QTime": 150
  },
  "initFailures": {},
  "status": {}
}

部分的な応答:

{
  "responseHeader": {
    "status": 0,
    "QTime": 35
  },
  "initFailures": {},
  "status": {
    "books": {
      "name": "books",
      "instanceDir": "/var/lib/solr/books",
      "dataDir": "/var/lib/solr/books/data/",
      "config": "solrconfig.xml",
      "schema": "schema.xml",
      "startTime": "2022-11-14T20:55:36.571Z",
      "uptime": 4286,
      "index": {
        "numDocs": 0,
        "maxDoc": 0,
        "deletedDocs": 0,
        "indexHeapUsageBytes": 0,
        "version": 4748,
        "segmentCount": 0,
        "current": true,
        "hasDeletions": false,
        "directory": "org.apache.lucene.store.NRTCachingDirectory:NRTCachingDirectory(MMapDirectory@/var/lib/solr/books/data/index lockFactory=org.apache.lucene.store.NativeFSLockFactory@7bae9d87; maxCacheMB=48.0 maxMergeSizeMB=4.0)",
        "segmentsFile": "segments_c1",
        "segmentsFileSizeInBytes": 119,
        "userData": {
          "commitCommandVer": "0",
          "commitTimeMSec": "1658435977333"
        },
        "lastModified": "2022-07-21T20:39:37.333Z",
        "sizeInBytes": 119,
        "size": "119 bytes"
      }
    }
  }
}

上記の例では、booksコアが空で非常にシンプルなため、他のデータが多いコアよりも比較的速くロードされます。

すべてのコアがロードされた最終的な応答には、私の場合は19個のこのようなコアが含まれます。

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

おそらくそうではないでしょう。CoreContainerは内部的に完了したかどうかを知っているようですが、その情報は公開されていないようです。このような機能をサポートするのは簡単そうですね。

〜 David Smiley
Apache Lucene/Solr検索開発者
http://www.linkedin.com/in/davidwsmiley

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

CoreContainerにはgetLoadedCoreNamesとgetAllCoreNamesというメソッドがありますので、準備が整ったと思っていましたが、期待通りに動作しませんでした。
getAllCoreNamesは、ロードされているかどうかに関係なくすべてのコア名を返すと期待していましたが、デバッグ中にgetLoadedCoreNamesと同じように振る舞っていることに気づきました。

最終的に以下のように実装することにしました:

CoreContainer coreContainer = req.getCore().getCoreContainer();

// coreContainer.getSolrHome() を Path オブジェクトに変換する
Path solrHome = Paths.get(coreContainer.getSolrHome());
CorePropertiesLocator locator = new CorePropertiesLocator(solrHome);
List<CoreDescriptor> coreDescriptors = locator.discover(coreContainer);

// coreDescriptors からコア名のリストを取得する
Collection<String> cores = coreDescriptors.stream()
    .map(cd -> cd.getName())
    .collect(java.util.stream.Collectors.toList());

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

KandaSearch

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

投稿の削除

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