solr

【solr】point type fieldについて

はじめに

下記の理由から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を有効にすべし

参考

プリンストン大学Robert SedgewickさんのKDツリーレッスン