【Mroonga】 勉強会に参加してきました


社内ポータルにて添付ファイル(word、excel、pptなど)の全文検索が必要になり一念発起して毎月肉の日に開催している勉強会に参加してきました。

今回の質問項目はこちら。

  1. 形態素解析にて分割されたワードに対するsnippetの取得
  2. ひらがな・カタカナの同一視
  3. OR/AND検索の切り替え
  4. Normalizerを切り替えたらindexの再作成必要?
  5. バージョンアップ

1.形態素解析にて分割されたワードに対するsnippetの取得

mroongaでのsnippetとは検索にヒットした文字とその周辺の文章を取得するもの。

mroongaでは「mroonga_snippet」と「mronnga_snippet_html」がある。

これを利用するとsnippetが簡単に習得できるので非常に重宝するのですが困った事があった。

例えば「抽出方法」を検索した際に「抽出」と「方法」2つのワードで検索に行くが取得できる、下記の用にmroonga_snippetを使用した場合は「抽出方法」が含まれるものになるので、「抽出」だけでヒットしたレコードのsnippetを取得する事はできない。

mroonga_snippet(contents,300, 3,'utf8_unicode_ci',1, 1,'...', '...','抽出方法', '<span class="keyword">', '</span>')

これを解決するには「抽出」と「方法」の2つをmroonga_snippetに渡さなければならない。

しかし、「抽出方法」を自動で「抽出」と「方法」に分割する方法が分からなかったのだが。下記のようにすれば取得できるとのこと。

mysql> SELECT mroonga_command('tokenize TokenMecab 抽出方法 NormalizerAuto');
+--------------------------------------------------------------------------+
| mroonga_command('tokenize TokenMecab 抽出方法 NormalizerAuto')       |
+--------------------------------------------------------------------------+
| [{"value":"抽出","position":0,"force_prefix":false}], [{"value":"方法","position":0,"force_prefix":false}]             |
+--------------------------------------------------------------------------+

上記のように実際に「Tokenizer」と「Nomalizer」にて分割したワードを取得する事ができる。

このjsonから取得したvalueと元のキーワードをmroonga_snippetに渡してあげれば「抽出方法」「抽出」「方法」の3つのsnippetを取得する事ができる。

2.ひらがな・カタカナの同一視

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です