先日公開された Azure Search の 2015-02-28-Preview API には、More Like This の他にアナライザーの追加が行われています。基本的には Microsoft が開発して Office や Bing で使われているものらしいです。
Azure Search Service REST API Version 2015-02-28-Preview
- 50 analyzers backed by proprietary Microsoft natural language processing technology used in Office and Bing.
日本語のアナライザーも Lucene と Microsoft の 2 種類が用意されるようになりました。
- ja.lucene
- Uses morphological analysis
- Normalizes common katakana spelling variations
- Light stopwords/stoptags removal
- Character width-normalization
- Lemmatization - reduces inflected adjectives and verbs to their base form
- ja.microsoft
- Uses morphological analysis
とりあえず試してみようと思ったので、まずは RedDot.Search を前回と同様に改造しました。一応、対応したバージョンはブランチ切って GitHub にプッシュしてあります。
このフォークした RedDog.Search を使えば、以下のようなコードで新しいアナライザーを指定できます。
var connection = ApiConnection.Create("SEARCH_NAME", "ADMIN_KEY"); var client = new IndexManagementClient(connection); await client.CreateIndexAsync(new Index("entries") .WithStringField("id", x => x.IsKey().IsRetrievable()) .WithStringField("title", x => x.IsSearchable().IsRetrievable().Analyzer("ja.microsoft")) .WithStringField("body", x => x.IsSearchable().IsRetrievable().Analyzer("ja.microsoft")));
プレビューポータルで確認すると、以下のように表示されます。でも設定が出来ないのは残念ですね。
インデックスへのドキュメントの追加は、前回と同様にこのブログの記事を全て投入しました。検索キーワードは何時ものアレを使って、まずは ja.lucene の方から試します。
ハイライトを有効にすると、ある程度はどのように形態素解析されたか確認出来ます。
キーワード的にはいい感じに認識されている感じです。
次は ja.microsoft を指定したインデックスで検索してみます。
いい感じに見えますが、最後に全く関係なさそうな記事が混ざってきています。ハイライトの結果は以下の通りになりました。
Lucene に比べると、やたら細かくハイライトされてます。細切れにしすぎた結果、関係ない記事が検索結果に混ざってきたと考えるのが妥当な気がします。*1
ちなみに ja.lucene と ja.microsoft だと処理速度がかなり違ってきました。自分が試した範囲だと ja.microsoft が桁違いに遅かったので、基本的には ja.lucene 使っておけば良いと思います。
*1:検索結果が結構 Bing っぽい、悪い意味で