7.9. トークンフィルター

7.9.1. 概要

Groongaにはトークナイズされたトークンに所定の処理を行うトークンフィルターモジュールがあります。

トークンフィルターモジュールはプラグインとして追加できます。

トークンフィルタープラグインをGroongaに追加することでトークナイズされたトークンをカスタマイズできます。

テーブルは0個以上のトークンフィルターを持てます。テーブルにトークンフィルターを付けるには table_createtoken_filters オプションを使います。

以下は TokenFilterStopWord トークンフィルターモジュールを使う table_create の例です。

実行例:

plugin_register token_filters/stop_word
# [[0, 1337566253.89858, 0.000355720520019531], true]
table_create Terms TABLE_PAT_KEY ShortText \
  --default_tokenizer TokenBigram \
  --normalizer NormalizerAuto \
  --token_filters TokenFilterStopWord
# [[0, 1337566253.89858, 0.000355720520019531], true]

7.9.2. 利用可能なトークンフィルター

以下は組み込みのトークンフィルターのリストです。

  • TokenFilterStopWord
  • TokenFilterStem

7.9.2.1. TokenFilterStopWord

TokenFilterStopWord は、文書を検索する時にトークナイズされたトークンからストップワードを除去します。

TokenFilterStopWord は、文書を検索する時のみトークン除去するため、文書を追加した後でストップワードを指定することもできます。

ストップワードは、語彙表の is_stop_word カラムで指定します。

以下は TokenFilterStopWord トークンフィルターを使う例です。

実行例:

plugin_register token_filters/stop_word
# [[0, 1337566253.89858, 0.000355720520019531], true]
table_create Memos TABLE_NO_KEY
# [[0, 1337566253.89858, 0.000355720520019531], true]
column_create Memos content COLUMN_SCALAR ShortText
# [[0, 1337566253.89858, 0.000355720520019531], true]
table_create Terms TABLE_PAT_KEY ShortText \
  --default_tokenizer TokenBigram \
  --normalizer NormalizerAuto \
  --token_filters TokenFilterStopWord
# [[0, 1337566253.89858, 0.000355720520019531], true]
column_create Terms memos_content COLUMN_INDEX|WITH_POSITION Memos content
# [[0, 1337566253.89858, 0.000355720520019531], true]
column_create Terms is_stop_word COLUMN_SCALAR Bool
# [[0, 1337566253.89858, 0.000355720520019531], true]
load --table Terms
[
{"_key": "and", "is_stop_word": true}
]
# [[0, 1337566253.89858, 0.000355720520019531], 1]
load --table Memos
[
{"content": "Hello"},
{"content": "Hello and Good-bye"},
{"content": "Good-bye"}
]
# [[0, 1337566253.89858, 0.000355720520019531], 3]
select Memos --match_columns content --query "Hello and"
# [
#   [
#     0,
#     1337566253.89858,
#     0.000355720520019531
#   ],
#   [
#     [
#       [
#         2
#       ],
#       [
#         [
#           "_id",
#           "UInt32"
#         ],
#         [
#           "content",
#           "ShortText"
#         ]
#       ],
#       [
#         1,
#         "Hello"
#       ],
#       [
#         2,
#         "Hello and Good-bye"
#       ]
#     ]
#   ]
# ]

and というトークンは Terms テーブルでストップワードと指定されています。

"Hello" は文書内に and がありませんがマッチしています。なぜなら、 and はストップワードと指定されているため、クエリーから除去されているからです。

7.9.2.2. TokenFilterStem

TokenFilterStem は、トークナイズされたトークンをステミングします。

以下は TokenFilterStem トークンフィルターを使う例です。

実行例:

plugin_register token_filters/stem
# [[0, 1337566253.89858, 0.000355720520019531], true]
table_create Memos TABLE_NO_KEY
# [[0, 1337566253.89858, 0.000355720520019531], true]
column_create Memos content COLUMN_SCALAR ShortText
# [[0, 1337566253.89858, 0.000355720520019531], true]
table_create Terms TABLE_PAT_KEY ShortText \
  --default_tokenizer TokenBigram \
  --normalizer NormalizerAuto \
  --token_filters TokenFilterStem
# [[0, 1337566253.89858, 0.000355720520019531], true]
column_create Terms memos_content COLUMN_INDEX|WITH_POSITION Memos content
# [[0, 1337566253.89858, 0.000355720520019531], true]
load --table Memos
[
{"content": "I develop Groonga"},
{"content": "I'm developing Groonga"},
{"content": "I developed Groonga"}
]
# [[0, 1337566253.89858, 0.000355720520019531], 3]
select Memos --match_columns content --query "develops"
# [
#   [
#     0,
#     1337566253.89858,
#     0.000355720520019531
#   ],
#   [
#     [
#       [
#         3
#       ],
#       [
#         [
#           "_id",
#           "UInt32"
#         ],
#         [
#           "content",
#           "ShortText"
#         ]
#       ],
#       [
#         1,
#         "I develop Groonga"
#       ],
#       [
#         2,
#         "I'm developing Groonga"
#       ],
#       [
#         3,
#         "I developed Groonga"
#       ]
#     ]
#   ]
# ]

developdevelopingdevelopeddevelops も、すべてステミングすると develop になります。そのため、 develops というクエリーで developdevelopingdeveloped も検索できます。

7.9.3. 参考