Migrating from TrieLongField to LongPointField

トピック作成者:ks-solruserml-bot (2024/08/06 21:43 投稿)
3
CloseClose

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

こんにちは、Solrユーザーの皆さん。

現在、Trie*クラスからの移行を進めており、その際にいくつかの質問が出てきました。ドキュメントには答えが見つからないため、質問させていただきます。

1.) これらのフィールド定義は同等ですか?

旧:

<fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>

新:

<fieldType name="long" class="solr.LongPointField" docValues="true"/>

新しいフィールドについて、precisionStepとpositionIncrementGapに関する記述が見つかりません。docValuesがこれを何らかの形で処理してくれると仮定しているのでしょうか?

2.) スキーマ変更後に再インデックスが必要ですか?

我々は大規模なコレクションを持っており、24時間365日リクエストに応じています。フルインデックスが必要でしょうか?それともSolr/Luceneはすべてが更新されるまで両方のフィールドタイプを処理できるのでしょうか?

ありがとうございます
Björn

返信投稿者:ks-solruserml-bot (2024/08/06 21:44 投稿)

似たような問題が発生しています。以下のコマンドを試したときに「Field type 'solr.TextField' not found」というエラーが表示されました。

curl --request POST --url http://localhost:8983/api/collections/minervasus/schema --header 'Content-Type: application/json' --data '{
"add-field": [
{"name": "tester", "type": "solr.LongPointField", "multiValued": false,
"required": true}
]
}'

これは、こちらのように、Solr 9.1.1 のダウンロード/解凍/実行の一環として schema_extra_types.xml ファイルがインストールされていないことが原因のようです。

修正方法は見つかりましたか?

よろしくお願いします
Tim

返信投稿者:ks-solruserml-bot (2024/08/06 21:44 投稿)

こんにちは、Björnさん。

「precisionStep」や「positionIncrementGap」は、PointFieldsでは使用されていません。「docValues」は、Trieフィールドで使用されていたときと同様に、Pointフィールドでもソートやファセットのために使用されます。また、いくつかのケースではクエリのパフォーマンスを向上させることもあります。

また、再インデックスが必要です。同じフィールドを使用してインプレースで行うことはできず、新しいインデックスを作成するか(新しいコレクションを作成するか、古いインデックスを削除してから再インデックスを行う)、新しいフィールドを使用する必要があります。既存のコレクション上で再インデックスを行いたい場合、以下の手順が考えられます:

1) 新しい数値型(例:long_point、int_point...)を使用する新しいセットのフィールドを追加する
2) 再インデックスを行い、新しいフィールドが古いフィールドとともに設定されるようにする(この際、copyFieldsを使用することもできます)
3) すべての再インデックスが完了したら、クエリを新しいフィールドに変更する。この時点で、スキーマから古いフィールドを削除し、インデックス時に設定を停止することができます

参考になれば幸いです。

Tomás

返信投稿者:ks-solruserml-bot (2024/08/06 21:44 投稿)

最初のメールへの返信として回答します。Tomásさんからの返信はスレッドのヘッダーが維持されていなかったため、こちらに返信します。

precisionStep設定はTrie型に固有のものであり、Point型ではサポートされていません。これは範囲クエリの高速化に関連する値で、ゼロに設定すると基本的に無効になります。

positionIncrementGap設定は、主にTextFieldクラスを使用するフィールドに意味があります。数値型にはフレーズクエリのようなものは基本的に存在しないため、この設定が影響を与えるのは主にフレーズクエリの場合です。

ほとんどのインデックス関連のスキーマ変更、今回の変更も含め、完全な再インデックスが必要です。スキーマがPoint型を使用していて、インデックスにTrie型が含まれている場合、それは機能しません。問題は、静かに失敗する、部分的に失敗する、例外を投げる、またはインデックスが読み込まれないなど、さまざまです。試したことがないので、実際に何が起こるかはわかりません。

補足: Point型は単純なfield:valueクエリではTrieよりもかなり遅いですが、Trieは非推奨であり、削除される予定です。バージョン6から非推奨になっているので、既に削除されているかもしれません。しかし、Point型は範囲クエリには非常に優れており、「field:[value TO value]」のように変更すると高速です。

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

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

KandaSearch

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

投稿の削除

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