はじめに
下記の理由からPoint Typeフィールドとは何かを調査してみた。
- solr7.0でPoint Type Fieldという新しいデータ構造がサポートされた。
- すべてのトライ木ベースの数値系、date系のフィールドがdeprecatedとなった。
Point Typeとは?
いわゆるkdツリーと呼ばれるデータ構造で、値空間を小さく分割することで、indexingや検索性能を高めることができるらしい
スキーマ定義
下記のように定義して使用する
<fieldType name="pint" class="solr.IntPointField" docValues="true"/>
<fieldType name="pfloat" class="solr.FloatPointField" docValues="true"/>
<fieldType name="plong" class="solr.LongPointField" docValues="true"/>
<fieldType name="pdouble" class="solr.DoublePointField" docValues="true"/>
注意点として、現状のPointフィールドではfieldcacheがサポートされていないため、基本的にdocValuesを有効にすることが推奨される。
まとめ
- Pointフィールドはranged検索では高速(速度、メモリ、ディスク観点)だが、単純なfield:valueの検索ではパフォーマンスは下がるらしいので、現時点では用途に応じて使いわけるのが良さそう(将来的に改善される可能性はあるとのこと)
- Pointフィールドはfieldcacheが使えないのでdocValuesを有効にすべし