1.4K Views
June 02, 22
スライド概要
SolrのDocValuesの基本的な内容を説明しました
LIFULL HOME'Sを運営する株式会社LIFULLのアカウントです。 LIFULLが主催するエンジニア向けイベント「Ltech」等で公開されたスライド等をこちらで共有しております。
[Solr] DocValues 株式会社LIFULL 社内技術勉強会 秀野 亮
DocValuesとは? DocValues とは、フィールドの値を内部的に記録する方法。 ソートやファセットなどの一部の目的では、従来のインデックスよりも効率的。
DocValuesとは? 全文検索は転置インデックスを使って高速な検索を行う ソート、ファセット、グルーピング、などの処理には不向き ↓ ドキュメントをキーに値を持つ、列指向のインデックス FieldCacheよりメモリ効率が上がる ソート、ファセット、グルーピングのための検索が早くなる 他にも /export handler, Stream Expressions など DocValues 前提の機能が使える
DocValuesとは? FieldCacheは最初のクエリー時に構築されるが、DocValuesはインデクシング時に 構築される →頻繁に更新されるデータ(NRT)向き JVMのヒープを圧迫しないようOSのメモリを使う(ファイルに書き出される)
DocValuesの有効化 <field name="field123" type="string" indexed="false" stored="false" docValues="true" /> フィールドの定義やフィールドタイプの定義にdocValues="true" を追加するだけ ただし、全データの再インデックスが必要 本当は uninvertible=”false” にして、必要な所で docValues="true" することが強く推奨されている (indexed=”true” docValues="false" だとソート、ファセット、グルーピングが出来なくなる)
DocValuesの有効化 フィールド StrField UUIDField BoolField DatePointField DoublePointField FloatPointField IntPointField LongPointField multi-valuedでの重複可否 ソート 重複不可(除去) 重複不可(除去) 重複可 EnumFieldType 重複不可(除去) CurrencyFieldType 重複不可(除去) その他、非推奨フィールドのいくつかに対応している single-valueの場合、ソートの ためにDocValues必須
DocValuesの有効化 DocValues関連のデータはメモリとディスクに保存される(Luceneデフォルト) docValuesFormat=Directで全てメモリ上に保存できる docValuesFormat=Diskで全てディスク上に保存できる(最小限のデータをメモリに読み込む) Luceneはデフォルトの挙動しか保証していない → 将来的に無効になる可能性はある
DocValuesの使い方 useDocValuesAsStored=”true” にすると値を保持できる(trueがデフォルト) useDocValuesAsStored=”false” の場合 fl=*にマッチしない(q=*:*も) フィールド指定すれば値を取得できるがDocValuesは列指向のためコストがかかる multi-valuedフィールドでは値はソートされ、重複排除される(SORTED_SETの場合) multi-valuedフィールドでも stored=”true” にすれば挿入順で取得できる(サイズ増)
DocValuesの使い方 docValues="true" のフィールドのみ取得した場合、パフォーマンスが上がる可能性がある →ディスクにアクセスせず、全てのデータをメモリから取得できるから →メモリから落ちてる部分はディスクから取得することになりそう?
その他 インデックスサイズの増減はケース・バイ・ケース →既存の設定に追加した場合は増える 性能はFieldCacheと比較して大差ないか、劣るくらい →Solr6くらいの話題なので今は改善されてるかも
参考 SolrでのdocValuesとstoredの使い分け Lucene/Solr DocValuesについて調べたことをまとめてみた- YOMON8.NET solr — SolrのdocValuesとは何ですか?いつ使うべきですか?