soleami (ソレミ)の使い方〜はじめてのSolrの立ち上げからログの可視化まで〜

14/02/2012

Apache Solrが出力するクエリログを可視化するツールsoleamiの使い方をご紹介します。本稿ではもっとも一般的な使い方を想定し、SolrをTomcat上にデプロイして使う場合について解説します。

おおまかな手順は、以下の通りです(すでにTomcat上で稼働しているSolrをお持ちの方は、手順4.からお読みください)。

  1. Tomcatのダウンロード
  2. Solrのダウンロード
  3. 文字化け対策
  4. solrconfig.xmlの編集
  5. SolrのTomcatへのデプロイと起動
  6. 検索を実行
  7. soleamiでログを可視化

なお、Linux/Macの環境を前提に話を進めます。Windowsの場合はcygwinなどを使いながら、置き換えて読み進めてください。

またユーザsolrがログインディレクトリ/home/solrの下にworkというディレクトリを作成し、その下に環境を作成して作業するものとします。そこでまず、workというディレクトリを作成しておきます。

$ pwd
/home/solr
$ mkdir work
$ cd work
$ pwd
/home/solr/work

なお、JavaとAntがあらかじめインストールされていることが必要です。

Tomcatのダウンロード

まず、Tomcat 6.0.35をダウンロードします。

# workディレクトリにTomcat 6.0.35をダウンロード
$ pwd
/home/solr/work
$ wget http://ftp.meisei-u.ac.jp/mirror/apache/dist/tomcat/tomcat-6/v6.0.35/bin/apache-tomcat-6.0.35.tar.gz

そしてダウンロードしたファイルを解凍します。

$ wget tar xvzf apache-tomcat-6.0.35.tar.gz
x apache-tomcat-6.0.35/bin/catalina.sh
x apache-tomcat-6.0.35/bin/digest.sh
x apache-tomcat-6.0.35/bin/setclasspath.sh
x apache-tomcat-6.0.35/bin/shutdown.sh
x apache-tomcat-6.0.35/bin/startup.sh
x apache-tomcat-6.0.35/bin/tool-wrapper.sh
x apache-tomcat-6.0.35/bin/version.sh
     :

Tomcatに関しての準備は以上です。

Solrのダウンロード

次にSolrをダウンロードします。ここでは本日時点の最新バージョンである3.5.0をダウンロードします。注意していただきたいのは、後述するように「文字化け対策」をする必要があるので、Solrのバイナリ版ではなく、ソース版をダウンロードする必要があることです。

# workディレクトリにソース版Solr 3.5.0をダウンロード
$ pwd
/home/solr/work
$ wget http://ftp.jaist.ac.jp/pub/apache//lucene/solr/3.5.0/apache-solr-3.5.0-src.tgz

そしてダウンロードしたファイルを解凍します。

$ tar xvzf apache-solr-3.5.0-src.tgz
x apache-solr-3.5.0/dev-tools/
x apache-solr-3.5.0/dev-tools/eclipse/
x apache-solr-3.5.0/dev-tools/idea/
x apache-solr-3.5.0/dev-tools/idea/.idea/
x apache-solr-3.5.0/dev-tools/idea/.idea/copyright/
x apache-solr-3.5.0/dev-tools/idea/.idea/libraries/
x apache-solr-3.5.0/dev-tools/idea/lucene/
x apache-solr-3.5.0/dev-tools/idea/lucene/contrib/
     :

以上でSolrの準備自体は終わりですが、次に「文字化け対策」の作業が必要です。

文字化け対策

ダウンロードしたままのTomcatにSolrをデプロイすると、確実に文字化けが発生してしまいます。そこでTomcatとSolrに対して以下の作業が必要になります。

Tomcatのserver.xmlの編集

Tomcatのserver.xmlをエディタで開きます。

$ vi apache-tomcat-6.0.35/conf/server.xml

そして次のConnector要素の部分を見つけ、useBodyEncodingForURI=”true”を追記します。

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" useBodyEncodingForURI="true"/>

できたら、server.xmlファイルを保存してエディタを終了します。

Tomcat提供のサーブレットフィルターをSolrにコピー

次に、TomcatのexamplesにあるサーブレットフィルターをSolrにコピーします。

$ cp -R apache-tomcat-6.0.35/webapps/examples/WEB-INF/classes/filters apache-solr-3.5.0/solr/core/src/java

Solrのweb.xmlを編集

次にSolrのweb.xmlを編集します。適当なエディタでweb.xmlを開いてください。

$ vi apache-solr-3.5.0/solr/webapp/web/WEB-INF/web.xml

そしてweb.xmlファイルの中の既存のfilter定義の前に次のようなSetCharacterEncodingFilterを使用する旨の記述を挿入します。

  <filter>
    <filter-name>SetCharacterEncoding</filter-name>
    <filter-class>filters.SetCharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <!-- 以下は既存の定義です -->
  <filter>
    <filter-name>SolrRequestFilter</filter-name>
     :

次に同じファイルのもう少し下を見ていくと、filter-mappingを定義している箇所があります。同じくその前に次のようにSetCharacterEncodingの定義を挿入します。

  <filter-mapping>
    <filter-name>SetCharacterEncoding</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <!-- 以下は既存の定義です -->
  <filter-mapping>
    <filter-name>SolrRequestFilter</filter-name>
      :

Solrのビルド

以上でビルドの準備が整いましたので、antを使ってSolrをビルドします。

$ cd apache-solr-3.5.0/solr
$ pwd
/home/solr/work/apache-solr-3.5.0/solr
$ ant -Dversion=3.5.0 example

solrconfig.xmlの編集

次に、solrconfig.xmlから、(ログの可視化には)不要な部分を取り除きます。この手順は必須ではありませんが、デフォルトの状態だとSolr起動時におかしなクエリが飛んでしまうので、可視化した際にゴミが目立ってしまいます。そこで、次のように適当なエディタでsolrconfig.xmlファイルを開きます。

$ pwd
/home/solr/work/apache-solr-3.5.0/solr
$ vi example/solr/conf/solrconfig.xml

そして以下のようなfirstSearcherの箇所を見つけ、listenerタグごと削除するか、以下のようにコメントアウトしてください。

    <listener event="firstSearcher" class="solr.QuerySenderListener">
      <arr name="queries">
<!-- ここの部分をコメントアウトします。
        <lst>
          <str name="q">static firstSearcher warming in solrconfig.xml</str>
        </lst>
-->
      </arr>
    </listener>

SolrのTomcatへのデプロイと起動

次に、SolrのwarファイルをTomcatにデプロイします。前述の手順でSolrをビルドすると、Solrのdistというディレクトリの下にwarファイルが作られています。このファイルはapache-solr-3.5.0.warという名前になっているので、solr.warと名前を変えて、Tomcatのwebappsディレクトリの下にコピーしてデプロイします。

$ pwd
/home/solr/work
$ cp apache-solr-3.5.0/solr/dist/apache-solr-3.5.0.war apache-tomcat-6.0.35/webapps/solr.war

そしてTomcatを起動します。その際、環境変数CATALINA_OPTSにSolrホームディレクトリ(solrconfig.xmlファイルが配置されているディレクトリの親ディレクトリ)を指し示すように設定が必要です。また環境によっては、システムプロパティfile.encodingの設定も必要になりますので、環境に合わせてTomcatを起動してください。

$ export CATALINA_OPTS="-Dsolr.solr.home=/home/solr/work/apache-solr-3.5.0/solr/example/solr -Dfile.encoding=UTF-8"; ./apache-tomcat-6.0.35/bin/startup.sh

検索を実行

ではブラウザからTomcatにアクセスして管理画面を立ち上げてみましょう。ブラウザから http://localhost:8080/solr/admin/ にアクセスします。

soleami-howto-solr-admin

Solrの管理画面

ここでは、街中検索系のサイトを運営していると仮定して、管理画面の入力エリアに「渋谷 ラーメン」と入力してSearchボタンをクリックします。なお、「渋谷」と「ラーメン」の間にはスペースが入っています。いうまでもなく、渋谷でラーメン屋さんを探しているようなイメージです。

すると、XMLで検索結果が戻ってきますが、データも入れていないので当然0件の検索結果になります。1回だけのクエリではつまらないのでもう一つ、「渋谷 郵便局」という検索もやっておきましょう。ブラウザの戻るボタンで管理画面に戻り、入力エリアに「渋谷 郵便局」と入力してSearchボタンをクリックします。

この状態で、Tomcatのログを確認しておきましょう。catalina.outの最後の方に今検索した「渋谷 ラーメン」や「渋谷 郵便局」という行が記録されているはずです。

$ tail apache-tomcat-6.0.35/logs/catalina.out
2012/02/14 14:02:46 org.apache.solr.core.SolrCore execute
情報: [] webapp=/solr path=/select/ params={indent=on&start=0&q=渋谷+ラーメン&version=2.2&rows=10} hits=0 status=0 QTime=37
2012/02/14 14:02:58 org.apache.solr.core.SolrCore execute
情報: [] webapp=/solr path=/select/ params={indent=on&start=0&q=渋谷+郵便局&version=2.2&rows=10} hits=0 status=0 QTime=1

このとき、文字化けしていたり、文字化けしていなくてもUTF-8で記録されていない場合は、あとで可視化できなくなってしまいますので、その場合はこれまでの手順を見直してください。

soleamiでログを可視化

さていよいよcatalina.outのクエリログを可視化してみましょう。もしまだsoleamiにユーザ登録していなかったら、ここで ユーザ登録 から登録しておいてください。

ではsoleamiのメニューのアップロードをクリックします。ここで未ログインの場合はログインを促されますので、登録したユーザ名(メールアドレス)とパスワードを使ってログインします。

すると下のようなログファイルをアップロードする画面が表示されます。

soleami-howto-upload

soleamiのファイルアップロード画面

画面に指示のあるとおり、ログファイルはZIP圧縮してアップロードしてください。その際に、機密保持のためにシステムから指定されたパスワードで暗号化する必要があります(実は暗号化しなくても動作しますが、後述するようにアップロード中はSSL通信しないので、暗号化するようにしてください)。

$ cd apache-tomcat-6.0.35/logs
$ zip -e catalina.out.zip catalina.out
Enter password: fRciL_yU
Verify password: fRciL_yU
  adding: catalina.out (deflated 92%)

ここではZIP圧縮するファイルはcatalina.outひとつだけですが、ディレクトリに複数のクエリログファイルがある場合、そのディレクトリごとZIP圧縮しても問題ありません。また、各ログファイルは.logという拡張子を持っていなくても大丈夫です。ただし、まとめてZIP圧縮する場合は、余計な(ゴミ)ファイルは含まれないようにしてください。

なお、ZIP圧縮後のファイルサイズは10MBを超えてはいけません(10MBを超える場合は、複数回に分けてアップロードしてください。最大過去12ヶ月分のログが可視化できます)。

ZIP圧縮したらファイルアップロードの画面でZIPファイルを選択し、[アップロード] ボタンをクリックします。すると、お使いのブラウザによっては、次のような「セキュリティ警告」が表示されます。

soleami-howto-security-warning

ファイルアップロードしようとすると、セキュリティ警告が表示される

これは、今表示されている「ファイルアップロード画面」自体がSSLで送信されているのに対し、アップロードしようとしているZIPファイルがSSLを使っていないためです。しかし、ZIPファイルは暗号化されているので機密は保たれていますから、[続ける] をクリックしてアップロードします。

アップロード終了後、数分〜数十分待つと次のようなメールがsoleamiから届きます。

おめでとうございます!

アップロードしていただきましたログファイルの解析が終了しました。
下記リンクをクリックし、可視化を体験してください!

http://soleami.com/p/visualize?locale=ja

アップロード時刻(日本時間): 2012/02/14 14:44:47
データベースを初期化する: No

ではメール中にあるリンクをクリックして、「可視化」を開始してみましょう。

「可視化」の画面は最初は[トップ10] タブが選択された状態になっています。今回は「渋谷 ラーメン」および「渋谷 郵便局」という検索を行いましたので、下の画面のように今月の「トップ10」が表示されます(なお、先月以前の部分は「no log data…」と表示されます)。

soleami-howto-top10

トップ10チャートのサンプル

次に[トレンド1000] のタブを選択してみましょう。すると、次のように検索キーワードのリストが表示されます。

soleami-howto-trend1000-list

トレンド1000の検索キーワードリストの表示

ここで、「渋谷(2)」をクリックします。すると、次のような折れ線グラフと棒グラフが表示されます。

soleami-howto-trend1000-chart

トレンド1000で「渋谷」を選択したところ

ここで折れ線グラフの方は「渋谷」という検索キーワードの過去12ヶ月間の検索回数の推移を表しています。そして棒グラフの方は、主キーワードである「渋谷」と一緒に検索された副キーワードの過去12ヶ月間の累積回数を表しています。これらのチャートから「渋谷」で「ラーメン」屋や「郵便局」を探している人がいるんだなあ、ということが読み取れます。

次に[0件ヒット] のタブを選択してみましょう。すると先ほどと同じようにクエリのリストが表示されます。違うのは、先ほどは検索キーワードの単位にリスト表示されていたのが、ここではクエリ文字列単位になっていることです。「渋谷 ラーメン(1)」「渋谷 郵便局(1)」となっていますので、「渋谷 ラーメン(1)」をクリックしてみます。すると次の画面のようなチャートが表示され、「0件ヒット」を起こした「渋谷 ラーメン」というクエリの過去12ヶ月間の推移がわかります。

soleami-howto-zerohits

0件ヒットで適当なクエリを選択してチャートを表示したところ

「0件ヒット」は検索システムがユーザ(サイト訪問者)のニーズに応えられなかったことを表しています。特にECサイトでは「0件ヒット」の発生は重大視される傾向にあります。「0件ヒット」が起こった場合は、類義語辞書を使っているサイトではその内容を見直したり、コンテンツを検討するなどして発生を少なくすることが、ユーザの満足度向上につながります。

今回のサンプルではたった2回の検索実行を可視化しただけでしたが、Solrの起動から可視化までの流れをつかんでいただけたことと思います。実際にSolrを運用しているログファイルを分析すると、季節による検索キーワードの傾向が読み取れたり、また企業内検索では「社員が今求めているもの」を把握することができます。

Solrとともにsoleamiを上手に活用していただき、貴社の検索システムのコンテンツの充実化や利便性向上にぜひお役立てください!

» Pagetop