2
0

DocValuesとは

Last updated at Posted at 2021-07-15

DocValuesとは?

DocValues とは、フィールドの値を内部的に記録する方法。
ソートやファセットなどの一部の目的では、従来のインデックスよりも効率的。

全文検索は 転置インデックス を使って高速な検索を行う。
転置インデックスは、ソート/ファセット/グルーピングなどの処理には不向き。

そこでDocValues。

  • ドキュメントをキーに値を持つ、列指向のインデックス
  • FieldCacheよりメモリ効率が上がる(?)
  • ソート/ファセット/グルーピングのための検索が早くなる
  • 他にも /export handler, Stream Expressions など DocValues 前提の機能が使える
  • FieldCacheは最初のクエリー時に構築されるが、DocValuesはインデクシング時に構築される
    • 頻繁に更新されるデータ(NRT)向き
  • JVMのヒープを圧迫しないようOSのメモリを使う(ファイルに書き出される)

DocValuesの有効化

Solrでの設定方法

schema.xml
<field name="field123" type="string" indexed="false" stored="false" docValues="true" />

フィールドの定義やフィールドタイプの定義に docValues="true" を追加するだけ。
ただし、全データの再インデックスが必要。

本当は uninvertible=”false” にして、必要な所で docValues="true" することが強く推奨されている(その場合 indexed=”true” docValues="false" だとソート/ファセット/グルーピングが出来なくなる)。

型ごとの対応状況

フィールド multi-valuedでの重複可否 ソート
StrField
UUIDField
重複不可(除去) -
BoolField 重複不可(除去) -
DatePointField
DoublePointField
FloatPointField
IntPointField
LongPointField
重複可 single-valueの場合、ソートのためにDocValues必須
EnumFieldType 重複不可(除去) -
CurrencyFieldType 重複不可(除去) -

その他、非推奨フィールドのいくつかに対応している。
multi-valuedの場合、値はソート済みの状態で保持される。挿入順ではないので注意。
また、 *PointField のみmulti-valuedでも値を重複して保持でき、他のフィールドタイプと挙動が異なるので注意。

その他

DocValues関連のデータはメモリとディスクに保存される(Luceneデフォルト)
docValuesFormat=Direct で全てメモリ上に保存できる
docValuesFormat=Disk で全てディスク上に保存できる(最小限のデータをメモリに読み込む)
Luceneはデフォルトの挙動しか保証していない。将来的に無効になる可能性はある。

DocValuesの使い方

値の保持について

useDocValuesAsStored=”true” にすると値も保持できる(スキーマバージョン1.6以上の場合 true がデフォルト)。
useDocValuesAsStored=”false” の場合、

  • fl=* にマッチしないのでレスポンスに含まれない( q=*:* も)
  • フィールド指定すれば値を取得できるが、DocValuesは列指向のためコストがかかる
  • multi-valuedフィールドでは値はソートされ、重複排除される( SORTED_SET の場合)
  • multi-valuedフィールドでも stored=”true” にすれば挿入順で取得できる(サイズ増)

パフォーマンスへの影響

docValues="true" のフィールドのみ取得した場合、パフォーマンスが上がる可能性がある

  • ディスクにアクセスせず、全てのデータをメモリから取得できるから
  • メモリから落ちてる部分はディスクから取得することになりそう?

参考情報

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0