7.11.3.1. scorer_tf_at_most#

注釈

スコアラーは実験的な機能です。

Added in version 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. 参考#