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_columnsscorer_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つしか含んでいなかったら、スコアーは 12 になります。なぜなら、スコアーが指定された最大値 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 でスコアーの値を返します。

selectFloat ではなく Int32_score を返します。これは、後方互換性を維持するために Float から Int32 にキャストしているためです。

スコアーは制限つきのTFで計算します。

7.11.3.1.6. 参考