Apache Solrについて

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

どうも、「気分屋」若林です。
最近Apache Solrを業務で使用しております。
いい機会なので今日はApache Solrについて書きます。

Apache Solrについて

【Apache Solrって?】

皆さんはApache Solrって聞いたことありますか?
私は業務で触るまで見たことも聞いたこともありませんでした。
そんなApache Solrを簡単に一言で説明すると、「無料で構築できる検索エンジン」です。

「全文検索エンジンライブラリLuceneをベースに、管理画面やキャッシュ機構を取り入れたアプリケーション。」
Wikipediaにはこう書かれております。

検索エンジンのアーキテクチャってどうなっているのか?
若かりし頃(今も若いですが)、こんなことを考えたことがありました。

『キーワードを打ち込んで「検索」ボタンを押すと瞬時に返ってくるレスポンス、どうやって実現しているのか。
文字列の部分検索はlike検索だから、超高速なデータベースでも使っているのかな?』

Apache Solrを調べることによってそんな疑問も解消されました。

【Apache Solrの2つの単語分割機能】

Apache Solrの特長である単語分割機能を説明します。
これは私がApache Solrを初めて使った時、衝撃を受けた機能です。

[形態素解析]

まずは形態素解析です。
中々聞きなれない言葉だと思いますが、下記の例を見てください。

「私の名前は若林です」
このような文があったとします。
この文を形態素解析すると、
「私 の 名前 は 若林 です」
と解析されます。

Apache Solrの中に辞書というものがあり、その中に上記のワードが全て登録されております。
上記のワードは全て辞書の中で、

 名詞-代名詞-一般
 助詞-連体化
名前  名詞-一般
 助詞-係助詞
若林  名詞-固有名詞-人名-姓
です  助動詞

と登録されています。

形態素解析の弱点は、辞書にない単語があると、正しい解析が行われないことです。

[N-gram解析]

Apache Solrにはもう1つ解析機能があります。
N-gram解析です。(Nには主に1~3が入ります)
N-gramは文章をN文字ずつ区切って解析する機能です。

先ほどの文章を、2-gramで解析すると、
「私の 名前 は若 林で す」
となります。
こちらは辞書を必要としない反面、
意図した解析結果にならないことが起こりえます。

【Apache Solrの検索機能】

ユーザーが指定したキーワードを、複数の文字列から検索することを、全文検索といいます。
SQLのlike検索やLinuxのgrepコマンドは、先頭から順次検索する順次検索方式ですが、Apache Solrは転置索引方式を採用しております。

転置索引方式とは、あらかじめ転置索引というものを作成しておき、検索時にその転置索引を使って検索する方式です。
転置索引とは、検索対象の文字列をあらかじめ形態素解析で単語分割しておき、分割した単語と元の文字列を元にマップを作ります。
これが転置索引です。

a.私は若林ジャパンを応援しています。
b.私は若林に住んでおります。
c.今日はいい天気です。

aを単語分割し、
「私 は 若林 ジャパン を  応援 し て い ま す」
bを単語分割し、
「私 は 若林 に 住ん で おり ま す」
cを単語分割し、
「今日 は いい 天気 です」

転置索引は下記のようになります。

転置索引
図1:転置索引

「若林」と検索された場合は、転置索引から、「a,b」という結果が得られ、a,bの文章に「若林」が含まれていたことがわかります。

順次検索方式に比べてデータのサイズは大きくなりますが、その分検索のスピードが速くなることが、直感的にわかります。

この転置索引方式を採用して、検索エンジンの速さが実現されているということです。

【おわり】

Apache Solrについて興味を持たれましたか?
次回もApache Solrについてもう少し高度な説明をしていきます。




広告システムについてのお問い合わせやご相談、パッケージ製品の詳細はこちらからどうぞ。
http://admage.jp/
アプリ計測SDK admage for Appのお問い合わせ・詳細はこちら。
http://apptizer.jp/

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

コメント

コメントを残す

*