5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

groongaのtokenizeコマンドを使ってマッチしない理由を確認するには

Posted at

もっとgroongaを知ってもらおう!ということで週刊groongaをはじめました。毎週木曜にgroongaやmroonga、rroongaのトピックを投稿予定です。

いよいよ、gihyo.jpさんでgroongaの隔週更新連載が始まりました!!
第5回の記事も公開されたので、一読をおすすめします。

連載は始まりましたが、利用事例をどんどん紹介していきたいです。(利用事例のストックが尽きたら終了してしまいます。)
groongaやmroonga、rroongaを実際に使っていて利用事例記事を書いてもいいよ、という人をまだまだ募集しています。
詳細はgroonga普及のための協力のお願いを参照してください。

はじめに

オープンソースのカラムストア機能付き全文検索エンジンgroongaを公開しています。

最新のバージョンは2013年5月29日にリリースした3.0.4です。

今回は、tokenizeコマンドを使ってマッチしない理由を確認する方法を紹介します。

tokenizeコマンドとは

groongaでは3.0.4からトークナイズした結果を確認する方法としてtokenizeコマンドをサポートしました。

例えば、本のタイトルを検索するときのことを考えてみましょう。
Books テーブルがあって、Books テーブルにはタイトルを保持するtitle カラムがあるとします。

サンプルのスキーマ定義は以下のようになるでしょう。

table_create Books TABLE_HASH_KEY UInt32
table_create Lexicon TABLE_HASH_KEY ShortText --default_tokenizer TokenMecab
column_create Books title COLUMN_SCALAR ShortText
column_create Lexicon index_title COLUMN_INDEX --type Books --source title

上記サンプルのためのサンプルデータを用意します。

load --table Books
[
{"_key":1,"title":"東京旅行"},
{"_key":2,"title":"京都旅行"},
{"_key":3,"title":"東京都案内"},
]

titleから東京都を検索してみましょう。

select Books --query title:@東京都

この結果は以下のようになります。

[
  [
    [1],
    [
      ["_id","UInt32"],["_key","UInt32"],["title","ShortText"]
    ],
    [3,3,"東京都案内"]
  ]
]

では次に、titleから東京を検索してみましょう。

「東京旅行」と「東京都案内」がひっかかりました。

[
  [
    [2],
    [
      ["_id","UInt32"],["_key","UInt32"],["title","ShortText"]
    ],
    [1,1,"東京旅行"],
    [3,3,"東京都案内"]
  ]
]

今度は、titleから京都を検索してみましょう。

この結果は以下のようになります。

[
  [
    [1],
    [
      ["_id","UInt32"],["_key","UInt32"],["title","ShortText"]
    ],
    [2,2,"京都旅行"]]]
  ]
]

「京都旅行」がひっかかりました。
でも、タイトルの一部に「京都」が含まれる「東京都案内」はひっかかりませんでした。

どうしてでしょうか。これはMeCabのトークナイズのしかたによるものです。

tokenizeコマンドでMeCabによるトークナイズを試すことができます。以下のようにして使います。

tokenize トークナイザー 文字列

"東京都案内"をトークナイズするには以下のコマンドを実行します。

> tokenize TokenMecab "東京都案内"

tokenizeコマンドの詳細はドキュメントを参照してもらうとして、「東京都案内」をトークナイズした結果は以下のようになります。

[{"value":"東京","position":0},{"value":"都","position":1},{"value":"案内","position":2}]

"東 京都 案内"ではなく"東京 都 案内"とトークナイズされていますね。
なので、"京都"にはマッチしなかったことがわかりました。

まとめ

今回は、groongaのtokenizeコマンドを使ってマッチしない理由を確認する方法を紹介しました。

groongaに興味を持ったなら、まずはインストールして試してみてください。

groongaの基本的な動作を知るためのチュートリアルもあります。インストールしたら試してみてください。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?