パッケージマネージャーを使って CurrencyFieldType にカスタムの providerClass を追加する方法 | KandaSearch Community Support Forum

パッケージマネージャーを使って CurrencyFieldType にカスタムの providerClass を追加する方法

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

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

皆さんこんにちは。

パッケージマネージャーは CurrencyFieldType にカスタムの providerClass を有効化できるはずでしょうか?
私は以下のようにパッケージマネージャーでカスタム jar を追加しました:

# jar を署名付きでアップロード
curl --data-binary @./lib/solr-mypkg-1.0-SNAPSHOT.jar -X PUT 'http://localhost:8983/api/cluster/files/mypkg/1.0/mypkg.jar?sig=...'

# プラグインを登録
curl http://localhost:8983/api/cluster/package -H 'Content-type:application/json' -d ' {"add": { "package" : "mypkg","version":"1.0", "files" :["/mypkg/1.0/mypkg.jar"]}}'

ですが、ClassicIndexSchemaFactory を使ってコレクションを作成しようとすると、以下のいずれの設定でも java.lang.ClassNotFoundException が発生してしまいます:

<fieldType name="custom_currency"
           class="solr.CurrencyFieldType"
           providerClass="mypkg:path.to.CustomExchangeRateProvider"
           ratesFileLocation="http://internal.exchange"/>
<fieldType name="custom_currency"
           class="solr.CurrencyFieldType"
           providerClass="path.to.CustomExchangeRateProvider"
           ratesFileLocation="http://internal.exchange"/>

もしかすると、これは managed schema でしか動作しないのでしょうか?
これから試してみますが、私たちとしてはスキーマを事前に把握しておき、変更不可能な状態にしておく方を好みます。

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

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

これは動作させることができましたが、CurrencyFieldType のカスタムパッケージ版を作成する必要がありました。

パッケージのインスタンス化が失敗しているのは、CurrencyFieldType.inform(loader) の後に SolrResourceLoader 内で threadlocal 変数が削除されるためだと思います。その結果、SolrResourceLoader.getPackageClass からクラスが取得されず null が返り、そのため pkg:class は有効なクラスとして認識されません。

もう一つの方法としては、パッケージマネージャーではなく solrconfig 内で <lib> を使うやり方があります。この場合は既存の CurrencyFieldType をそのまま利用できます。

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

KandaSearch

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

投稿の削除

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