バリューのランタイムタイプ | KandaSearch Community Support Forum

バリューのランタイムタイプ

トピック作成者:ks-solruserml-bot (2024/12/28 18:11 投稿)
2
OpenOpen

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

こんにちは!

クライアントAPIでは、インデックスに追加するドキュメントを指定できます。

例えば:

final var document = new SolrInputDocument();
document.addField("x", "a");
document.addField("y", "b");
document.addField("z", "c");
client.add(collection, document);

サーバー側にスキーマがあり、そこに「x」「y」「z」の型が定義されている場合、ドキュメントのインデックス作成時に正しい型が割り当てられます。ただし、これらのフィールドがスキーマに存在しない場合、ほぼ間違いなくテキスト型のようなフォールバック型が割り当てられるでしょう。

addField() メソッドのドキュメントには次のように記載されています:

"既存の値があってもなくてもフィールド値を追加します。valueパラメータとnameパラメータのクラス型はschema.xmlに一致する必要があります。schema.xmlはデフォルトでsolr homeのconfディレクトリ内にあります。"
パラメータ:
name – フィールド名。schema.xml内の "fields" タグで定義されたフィールド名の1つに一致する必要があります。
value – フィールド値。schema.xmlで該当フィールドの"type"属性で定義されたクラス型と同じクラス型である必要があります。

この記述から、「同じクラス型」とは、solr.UUIDFieldsolr.BoolField などの solr.* 型を指していると推測されます。しかし、このドキュメントはすでに誤りを含んでいるようです。なぜなら、上記の例では明らかに文字列定数値を渡していても問題なく受け入れられているからです。

実際に solr.* クラスの値を提供しようとすると、solr-core を依存関係として取り込む必要があります。しかし、それにより大量のサーバー側コンポーネントが含まれるようになります。それでも、例えば solr.UUIDField の値をどうやって作成すればよいのか明確ではありません。これらのクラスはフィールドの型に関するものであり、フィールドの値についてではないようです。

スキーマ内のほとんどのフィールドの型を指定することは可能ですが、一部のフィールドについては事前に正確な型を把握していません。これらのフィールドに対して、単なるテキスト型以上に精密な型が推論されるように値をAPIに渡すには、どうすればよいのでしょうか?

--
Mark Raynsford | https://www.io7m.com

返信投稿者:ks-solruserml-bot (2024/12/28 18:12 投稿)

こんにちは、Mark。

私の理解では、クライアントが送信するのは結局のところ文字列だと思います。例えば、JSONクライアントがJavaオブジェクトをサーバーにどうやって渡せるでしょうか?

記憶が正しければ、一部の値型はサポートされていますが、それが互換性の問題を引き起こすこともあります。数年前、私たちも同じ課題に直面しました。その際に取った選択肢の1つは、ある種のスキーマを開発することでした。もう1つの選択肢としては、動的フィールドのサフィックスを利用する方法もあります。

おそらく最も合法的な方法は、ドキュメントを送信する前にスキーマ(存在しないフィールドを確認し、作成する)を確実にすることですが、この方法は非常に遅くなるはずです。

これらのアプローチすべてに共通する最も弱い点は、同じフィールドに対して異なる型のインスタンスがドキュメント間で使用される可能性があることです。

クライアント経由でSolrコアオブジェクトを渡すのは選択肢にはなりません。

--
よろしくお願いします、
Mikhail Khludnev

返信投稿者:ks-solruserml-bot (2024/12/28 18:12 投稿)

あなたは「クラス」という言葉が何を意味しているのかを混同しています。スキーマでは、fieldType 定義の中の class 要素は、確かにあなたが挙げた solr.* クラスを指しています。しかし、SolrJのコードでは、これらのクラスは使用されません。それらはSolrのコアサーバーサイドコードの一部であり、SolrJには含まれていないからです。

ほとんどの場合、SolrJコードで使用されるデータ型は、そのデータを表現するために見つけられる最も基本的なクラスや変数型であるべきです... 例えば、StringintInteger などです。

よろしくお願いします。
Shawn

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

KandaSearch

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

投稿の削除

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