特定の保存フィールドを非圧縮に保つ

トピック作成者:ks-solruserml-bot (2024/09/22 22:00 投稿)
6
OpenOpen

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

こんにちは、

私は現在、Apache Solr 9.xで大きなパフォーマンスの問題に直面しており、皆さんからの洞察や提案を非常に期待しています。

コンテキスト:

私のSolr環境では、検索プロセスにおいてカスタムのポストフィルタが重要です。このフィルタは、検索中に各ドキュメントから特定の保存フィールドを読み取る必要があります。このフィールドには、フィルタのロジックに不可欠なアクセス制御情報が含まれています。

問題:

Solr 9.xにアップグレードしてから、パフォーマンスが劇的に低下しました。以前の約10倍から20倍ほど遅くなっており、これはSolr 9.xでは保存フィールドが圧縮されていることに起因しています。検索クエリ中にこれらのフィールドをデコードする際に大幅なオーバーヘッドが発生しています。

一つの解決策としては、文字列の代わりにバイナリフィールドを使用することです。なぜなら、Luceneではバイナリデータは圧縮されないためです。しかし、この方法の問題点は、バイナリフィールドを読み取るためにはドキュメント全体をロードしなければならないことです。保存フィールドが多いため、この方法では検索パフォーマンスが大幅に悪化する可能性があります。

質問:

このような問題に遭遇した方や、このシナリオを処理するための提案があれば教えていただけませんか?Luceneに対してフィールドを圧縮せずに保持するよう強制する方法はありますか?

よろしくお願いします。

Seez

返信投稿者:ks-solruserml-bot (2024/09/22 22:00 投稿)

保存フィールドはSolr 4.1.0から圧縮されるようになっています。非常に古いバージョンからアップグレードしたのでなければ、保存フィールドの圧縮がパフォーマンス問題の原因である可能性は低いです。

保存フィールドを圧縮しない方法としては、storedfalseに設定し、docValuestrueに設定し、useDocValuesAsStoredtrueにすることができます。ただし、すべてのフィールドタイプクラスがdocValuesをサポートしているわけではなく、特にTextFieldはサポートしていません。

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

返信投稿者:ks-solruserml-bot (2024/09/22 22:01 投稿)

こんにちは。
同意します。デフォルトでは、BEST_SPEED(LZ4)が使用されているため、これ以上速くすることや、圧縮を減らすことはできません。Binary DocValues Fieldが解決策になるはずです。

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

返信投稿者:ks-solruserml-bot (2024/09/22 22:01 投稿)

訂正します。どうやら私の保存されたフィールドはSolr 8.11でも圧縮されていたようです。しかし、9.xでは何かが変わったようです。データの解凍が非常に遅いです。新しいアルゴリズムでしょうか?

バイナリフィールドについてですが、Solrではバイナリフィールドに対してDocValuesを許可していません(ちなみにLuceneでは許可されています)。そこで保存されたバイナリフィールドを使用しようとしましたが、今度は1つの保存フィールドを読み取るために、すべてのフィールドをロードしなければならず、保存されたフィールドが大量にあるため問題になっています。

返信投稿者:ks-solruserml-bot (2024/09/22 22:01 投稿)

こんにちは、興味があるのですが、どのようにして9.4でフィールドの圧縮が遅さの原因だと結論付けたのでしょうか?

返信投稿者:ks-solruserml-bot (2024/09/22 22:01 投稿)

原因について結論を急いでいるように見えます。一度立ち止まって、いくつかの計測を行うことをお勧めします。

クエリの一部を一つずつ除外してテストしてみてください。返されるフィールドも含めてです。キャッシュの影響を避けるために、数千のクエリを含むクエリセットを使用してテストする必要があるかもしれません。

wunder
Walter Underwood
wunder@wunderwood.org
http://observer.wunderwood.org/ (私のブログ)

返信投稿者:ks-solruserml-bot (2024/09/22 22:01 投稿)

バイナリフィールドについてですが、Solrではバイナリフィールドに対してDocValuesを許可していません(ちなみにLuceneでは許可されています)。

https://solr.apache.org/guide/solr/latest/indexing-guide/field-types-included-with-solr.html では BinaryField について言及されています。
ちなみに、BinaryDocValues にはもう圧縮がありません
https://issues.apache.org/jira/browse/LUCENE-9843

そこで保存されたバイナリフィールドを使用しようとしましたが、今度は1つの保存フィールドを読み取るために、すべてのフィールドをロードしなければならず、保存されたフィールドが大量にあるため問題になっています。

そもそも docValues の意図は、特定のフィールドだけを読み取ることでした。これに対し、ストアドフィールドは「フィルタ」があっても常に全体のレコード(ドキュメント)を読み取ります。
おそらく、何らかの Solr のロジックがこれに影響を与えているかもしれませんが、docValues では特定のフィールドのみを読み取ることが期待されます。

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

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

KandaSearch

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

投稿の削除

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