読者です 読者をやめる 読者になる 読者になる

よしだのブログ

サブタイトルはありません。

出遅れたけど Amazon CloudSearch のアップデートと日本語ユーザー辞書を試してみる。

Amazon CloudSearch IT、プログラミング 検索エンジン

どうも!

かなり出遅れ感ありますが、Amazon CloudSearch のアップデートの確認と、特に目玉機能の日本語用ユーザー辞書を試してみました。ところで、他の CJKV のユーザー辞書に先駆けて日本語で・・というのはちょっと嬉しいですね。

リリースノート

Release: Amazon CloudSearch on 2014-10-16 http://aws.amazon.com/releasenotes/8599231268618266

Enhanced Japanese Language Processing

日本語の形態素解析用のユーザー辞書を追加することができるようになりました。これによって、検索結果の精度を向上させることができるようになります。マニュアルは以下。

http://docs.aws.amazon.com/cloudsearch/latest/developerguide/configuring-analysis-schemes.html#customizing-japanese-tokenization

CloudSearch の弱点である、ユーザー辞書の追加ができるようになったのはとても素晴らしいですね!

AWS CloudTrail Integration

CloudTrail を使って、API のコール記録のログをS3上に残せるようになりました。マニュアルは以下。

http://docs.aws.amazon.com/cloudsearch/latest/developerguide/logging-config-api-calls.html

ちょっとだけ調べてみたところ、クエリのログは取れないようです。あくまで、サービスのAPIコールということで、例えばドメインの作成やアクセスポリシーの変更などの操作が記録の対象になります。データの登録・更新・削除も同様です。以下、記録の対象になるアクションのリストです。

http://docs.aws.amazon.com/cloudsearch/latest/developerguide/API_Operations.html

クエリのログが残せない、ということで若干残念な気持ちもありますが、監査、監視目的ということであれば、とても有効なアップデートかと思います。*1

形態素解析用の辞書をいじってみる

ユーザー辞書は、Analysis Schema のページで定義することができます。ちなみに、対応言語は日本語だけなので、日本語を選ぶと、タブが出てきます。text もしくは text-array フィールドにのみ適用ができます。また、ユーザー辞書の適用後やエントリの編集時は、再インデキシング (rebuild index) が必要になります。(=別途料金がかかる・・)

以下、スクリーンショットたち。

f:id:yoshi0309:20141024103416j:plain

こんなかんじで定義します。Text には解析対象の文字列、Tokens は、空白スペース区切りでどのように区切るかを指定。Readings は読みを、Part of Speech には、品詞を設定します。調査不足で Readings と Part of Speech がどのように影響するかは不明です。。スイマセン。なお、JSON で書いて、CLI で登録する、ということも可能なので、SVN などでバージョン管理もやりやすいです。

f:id:yoshi0309:20141024103409p:plain

Analysis Scheme の定義後は、以下のように Index Field の定義画面で選択できるようになります。

f:id:yoshi0309:20141024103413j:plain

やってみた。

というわけで、動作確認。まずはデフォルトの状態で検索。body_n が自作した Analysis Scheme で、ユーザー辞書を適用するフィールド。下記の結果は、登録前の状態です。以前の検証と同じように、なんか変なのがヒットしているようです。「お」と「にく」が切れている。。

f:id:yoshi0309:20141024103421p:plain

ユーザー辞書に、以下のようにエントリーを登録して再インデキシング。「おにく」を登録しました。*2 ちなみに、ユーザー辞書に限らずですが、Rebuild Index はかなり時間がかかりすま。m1.small で1回15分はかかっていました。ドキュメントの数が 0 件でもこのぐらいはかかります。

f:id:yoshi0309:20141024103426p:plain

インデックス完了後に、確認のため Query Parser を Lucene にして、辞書を適用した body_n にのみ検索を実行したところ、ちゃんと改善されていることが確認できました!ちゃんと「おにく」と入っているドキュメントのみがヒットしました。

f:id:yoshi0309:20141024103428p:plain

素晴らしいですね!

その他、気がついたアップデート

  • いつの間にか(?)バイナリーファイルの全文検索ができるようになっていました。csv / pdf / html / excel / word / txt 。csv の場合、CloudSearch がデータをパースして、カラムごとに適当なフィールドにデータを入れてくれます。他のファイル種別についても、ファイルの本文およびメタデータを展開し、各値をフィールドに入れることができます。

  • Expression という機能について、この機能は独自のソートのルールを定義しておくことができ、検索時にしようすることができる。ソートのルールでは、検索対象の数値型と日付型(int/doble/date)のフィールドと現在時刻、スコア、ランダム値に対して、四則演算や、対数、絶対値、最大値、最長値、ビット演算などを使用することができる。以下は、ドキュメントに記載されている利用例。

例1:popularity(人気)フィールドの値と、スコア(一致度)に応じて検索結果をソートする。

(0.3*popularity)+(0.7*_score)

例2:スコア(一致度)が高く、リリース日が新しいものの順でソートする。

_score/(_time - release_date)

https://docs.aws.amazon.com/cloudsearch/latest/developerguide/configuring-expressions.html

以上、ご参考まで。

*1:まあ、クエリログは普通アプリで残すしね。。

*2:ゼウシくんもやりたかったのですが、都合上データを入れきれませんでした。。