7.11.3.1. scorer_tf_at_most
#
注釈
スコアラーは実験的な機能です。
バージョン 5.0.1 で追加.
7.11.3.1.1. 概要#
scorer_tf_at_most
はTF(term frequency。単語の出現数)ベースのスコアラーです。
TF-IDFベースのスコアラーを含むTFベースのスコアラーは次のケースに対して適していません。
文書中に「They are keyword, keyword, keyword ... and keyword」というように同じキーワードが大量に含まれているとその文書のスコアーが高くなってしまいます。これは意図した挙動ではありません。検索エンジンのスパマーはこのテクニックを使うかもしれません。
scorer_tf_at_most
はTFベースのスコアラーですが、このケースを解決できます。
scorer_tf_at_most
はスコアーの最大値を制限します。つまり、 scorer_tf_at_most
は1つのマッチの影響を制限することができるということです。
文書中に「They are keyword, keyword, keyword ... and keyword」というように同じキーワードが大量に含まれていても、 scorer_tf_at_most(column, 2.0)
はスコアーの値として大きくても 2
しか返しません。
スコアー関数だけでスコアの計算をする必要はありません。スコアー関数は検索クエリーに非常に依存しています。検索クエリーだけでなく、マッチしたレコードのメタデータも使えないか検討しましょう。
たとえば、Googleはスコアーの計算に ページランク を使っています。あなたも、データの種類(たとえば、「メモ」データよりも「タイトル」データの方が重要など)、タグ、位置情報などを使えないか検討してみましょう。
スコアーの計算をスコアー関数だけで考えることはやめましょう。
7.11.3.1.2. 構文#
このスコアラーの引数は2つです。:
scorer_tf_at_most(column, max)
scorer_tf_at_most(index, max)
7.11.3.1.3. 使い方#
このセクションではscorerの使い方について説明します。
使い方を示すために使うスキーマ定義とサンプルデータは以下の通りです。
サンプルスキーマ:
実行例:
table_create Logs TABLE_NO_KEY
# [[0,1337566253.89858,0.000355720520019531],true]
column_create Logs message COLUMN_SCALAR Text
# [[0,1337566253.89858,0.000355720520019531],true]
table_create Terms TABLE_PAT_KEY ShortText \
--default_tokenizer TokenBigram \
--normalizer NormalizerAuto
# [[0,1337566253.89858,0.000355720520019531],true]
column_create Terms message_index COLUMN_INDEX|WITH_POSITION Logs message
# [[0,1337566253.89858,0.000355720520019531],true]
サンプルデータ:
実行例:
load --table Logs
[
{"message": "Notice"},
{"message": "Notice Notice"},
{"message": "Notice Notice Notice"},
{"message": "Notice Notice Notice Notice"},
{"message": "Notice Notice Notice Notice Notice"}
]
# [[0,1337566253.89858,0.000355720520019531],5]
次のように match_columns で scorer_tf_at_most
を指定します。
実行例:
select Logs \
--match_columns "scorer_tf_at_most(message, 3.0)" \
--query "Notice" \
--output_columns "message, _score" \
--sort_keys "-_score"
# [
# [
# 0,
# 1337566253.89858,
# 0.000355720520019531
# ],
# [
# [
# [
# 5
# ],
# [
# [
# "message",
# "Text"
# ],
# [
# "_score",
# "Int32"
# ]
# ],
# [
# "Notice Notice Notice Notice Notice",
# 3
# ],
# [
# "Notice Notice Notice Notice",
# 3
# ],
# [
# "Notice Notice Notice",
# 3
# ],
# [
# "Notice Notice",
# 2
# ],
# [
# "Notice",
# 1
# ]
# ]
# ]
# ]
もし、文書が Notice
という単語を3個以上含んでいたら、スコアーは 3
になります。なぜなら、この select
ではスコアーの最大値を 3.0
と指定しているからです。
もし、文書が Notice
という単語を1つか2つしか含んでいなかったら、スコアーは 1
か 2
になります。なぜなら、スコアーが指定された最大値 3.0
より小さいからです。
7.11.3.1.4. 引数#
このセクションではすべての引数について説明します。
7.11.3.1.4.1. 必須引数#
必須の引数は1つです。
7.11.3.1.4.1.1. column
#
マッチ対象のデータカラムです。このデータカラムにはインデックスが張られていなければいけません。
7.11.3.1.4.1.2. index
#
検索に使うインデックスカラムです。
7.11.3.1.4.2. 省略可能引数#
省略可能な引数はありません。
7.11.3.1.5. 戻り値#
このスコアラーは Float32 でスコアーの値を返します。
select は Float
ではなく Int32
で _score
を返します。これは、後方互換性を維持するために Float
から Int32
にキャストしているためです。
スコアーは制限つきのTFで計算します。