Groongaの類似検索について
## 疑問(テーマ)
Mroonga での類似検索を行う場合、特徴の個数を変更することができるのか。
## 結論
Mroonga の特徴であるSQL互換の機能では不可能ただし、SQL互換以外のコマンド(Pragma?)を使用する手もあり。データのCreateとUpdateに関してはSQL側から操作し、検索(index, show)に関してはmroonga httpd を使うという手段がある。
詳細な内容
上記結論を得るまでの話の流れについて
### キーワード
- 形態素
- 類似文書検索
### 類似検索について
入力(文書) -> 処理 ->出力 (文書のリスト) 入力の文書から特徴になる形態素を抜き出し、その形態素を使ってor検索を実施するという仕組みになっている。特徴に一般的な語が混ざると入れてしまうとノイズ(無関係な文書)が増えてしまうと。
### 形態素解析について
類似検索では日本語の文章を形態素ごとに分けている。形態素とは、意味が通る、ことばの最小単位である。全文検索では形態素解析を使用しており、インデックスを付加する際などにも使われる。
### 検索の精度について
適合率と再現率がある。
- 再現率=見つけてきた正解の数/全ての正解の数
- 適合率=含まれる正解の数/見つけてきたものの数
適合率と再現率はトレードオフであるため、状況によって使い分ける必要がある。πが少ない時は、再現率をあげるよう努め、πが増えるにつれて、適合度をあげるように努める。
### その他の精度に関して
上記二つの指標以外として大事なことが、見せる順番と他の検索のリコメンドである。一つのクエリーで得られる結果を数十ページも見る人はそうそういない。そのため、はじめのページに重要そうなものを表示する必要があり、そのページの終わりに別の検索クエリーを提示するというようなことも重要に成る。google検索などで実際に行われている。いかに精度よく見つけるかと見つからなかったらどうするかということを視野に入れる必要がある。
### MroongaとGronnga の関係性
いわばMroonga は Groongaのラッパーであり、内部的にはGroongaが動いている。Mroongaはそのコンセプト上SQLから大きく外れないということを目指しているため、Groonga機能は網羅的に触れるようになっていない。しかし、SQL的でないコマンド(Pragma?要調査)などを使えば可能である。また、
Mroongaを介さずGroongaを直接 groonga httpd などで叩くことでも可能である。