Feb 2, 2011

Apache Solr 1.4 スキーマの設定 schema.xml fieldType

Solr のスキーマの設定は、$SOLR_HOME/conf/schema.xml に記述します。

fieldTypeの設定

<fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>


sortMissingLast / SortMissingFirst の設定

sortMissingLast="true": ソートする際に値が空の場合に検索結果の最後に空の結果を配置する。
sortMissingFirst="true": ソートする際に値が空の場合に検索結果の最初に空の結果を配置する。

デフォルトは両方ともfalse。この場合は、以下のようになります。
昇順(asc)を指定した場合は、最初に空の結果を配置
降順(desc)を指定した場合は、最後に空の結果を配置

また、両方とも true にすると、いずれの場合も最後に配置されるようになります。

全パターンで試してみた所、どうやら sortMissingLastの設定が優先されるのかな?


omitNorms は、検索にヒットした時のスコアを計算する時の設定項目です。

平均値(Norm)を省略する(omit)かどうか、みたいな値です。

平均値とは、検索ワード/フィールドの文字長 の値で、この値が大きければスコアを上げるということになります。
元になるキーワードの量によって、スコアを変えたくない場合は、true に設定します。

ただし、boost 値を利用する場合は、omitNorms="false" にしておきます。

boost値とは、ドキュメントをアップロードする際に、各フィールドの重み付けをしたり、
検索クエリで、fieldname:value^boost のようにして、検索値の重み付けをすることができます。

この辺りがどう作用しているのかは、検索クエリに、debugQuery=on としてスコアの計算を見ることができます。


デフォルトで用意されているフィールドタイプ一覧

文字列、真偽、バイナリ

string
boolean(true, false)
binary(sent/retrived as Base64 encoded Strings)

数値、日付系

int
float
long
double
date

より速い範囲検索が必要な場合は、t~ を検討。

tint
tfloat
tlong
tdouble
tdate

以下は下位互換性のためにあるものなので、基本的には利用しない。

pint
plong
pfloat
pdouble
pdate

sint
slong
sfloat
sdouble

int, tint などは、いずれも solr.TrieXxxField の実装で、トライ木による木構造でIndexが生成されます。

違いは、precisionStepの値の設定。
しかし、precisionStep を変えるとどうなるのかは、分からなかった。。

schema.xml には以下のように書いてあるから、値が小さい方が範囲検索は速そう。

Smaller precisionStep values (specified in bits) will lead to more tokens
indexed per value, slightly larger index size, and faster range queries.
A precisionStep of 0 disables indexing at different precision levels.

でも、NumericField の、javadoc を見ると、デフォルト値は4になっており、
tint などでは、8に設定してあるから、デフォルトより大きい?と思ったり。。
これは今後の調査課題としておきます。


特殊なフィールドタイプ

random(ランダムソート時に利用)
ignored(完全に無視するフィールドに利用)

その他のカスタムフィールドタイプ

text_ws
text
textTight
textgen
text_rev
lowercase
....

これらがどういう働きをするかは、schema.xml を見ると分かります。


lucene-ja を使った、形態素解析のフィールドタイプは以下のように指定します。

<fieldType name="text_ja" class="solr.TextField">
 <analyzer class="org.apache.lucene.analysis.ja.JapaneseAnalyzer" />
</fieldType>

カスタムフィールドは、全て class="solr.TextField" と指定します。


これらたいていのことは、schema.xml を読めば、ほとんど説明が書いてあります。




No comments:

Post a Comment