Nutch と Solr の連携 その1 〜 Nutch のインデックスを Solr からのぞいてみる 〜


Nutch はクロールしたデータの管理に Lucene 形式 のインデックスを使っています。
このため Lucene を使って Nutch のインデックスにアクセスしたり、Solr を使って検索することができます。


ちなみに3者の関係を整理するとこんな感じです。


Java のコーディングが得意な方は Lucene を使ってインデックスの中見ることができますが、そうじゃないボクのような人は Solr を使って見る方が楽かもしれません。
ここではSolr から Nutch の Lucene 形式のインデックスをのぞいてみる方法について書いてみます。


Solrのインストールがまだな方は、こちらを参考にしてください。

[おさらい][Solr][インストール] Linux で root 権限なしでも Solr を Tomcatの上で動かす1つのやりかた


また、今回は Solr のマルチコアを使います。マルチコアについてはこちらを参考にしてください。

[Solr] マルチコア (Multi core) ってすっげー便利で実は簡単


Nutch のインストールやクロールがまだの方はこちらを参考にやってみてください。

[Nutch][インストール] Apache プロジェクトのクローラ Nutch を軽く試してみた


これから説明する例ではクロール済みの Nutch の Lucene 形式のインデックスが
Nutch のインストールディレクトリの下の crawl/indexに有ることとしています。
具体的には /home/hoge/local/nutch-2009-05-30_04-01-38/crawl/index としています。
ディレクトリについては皆さんの環境に合わせて適宜読み替えてください。


セットアップ

nutch0 という SolrCore (以下、コア)を作って Nutch の Lucene 形式のインデックスをマウントします。

solr.xmlの作成

$ cd $CATALINA_HOME/webapps/solr
$ vi solr.xml
<solr persistent="false">
  <cores adminPath="/admin/cores">
    <core name="nutch0" instanceDir="nutch0" />
  </cores>
</solr>

インスタンスディレクトリの作成
$ mkdir nutch0
$ cp -r conf nutch0
$ cd nutch0/conf

$ cp /home/hoge/local/nutch-2009-05-30_04-01-38/conf/schema.xml . <- Nutch 付属のschema.xml をコピー

$ vi solrconfig.xml
<dataDir>/home/hoge/local/nutch-2009-05-30_04-01-38/crawl</dataDir> <- dataDirに Nutch のインデックスのあるディレクトリを指定。indexの親ディレクトリまでね。


セットアップ作業はこれだけで終了です。
Tomcat等のサーブレットコンテナを再起動しましょう。

$ $CATALINA_HOME/bin/shutdown.sh
$ $CATALINA_HOME/bin/startup.sh

Solr からの検索と表示

Solr から Nutch の Lucene 形式のインデックスを検索したり表示したりしてみます。


以下は、ホスト名localhost、ポート番号8080の場合の動作確認例です。環境に応じて適宜読み替えてください。


ブラウザからhttp://localhost:8080/solr/nutch0/admin/にアクセス。
検索窓にとりあえず「*:*」といれて search ボタンをクリック!

セットアップがうまく行っているとこんな感じで結果が表示されると思います。

<response>
−
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">29</int>
−
<lst name="params">
<str name="indent">on</str>
<str name="start">0</str>
<str name="q">solr</str>
<str name="rows">10</str>
<str name="version">2.2</str>
</lst>
</lst>
−
<result name="response" numFound="47" start="0">
−
<doc>
<float name="boost">1.1366198</float>
<str name="digest">c604907f922bc2094ed3d9c5f0203d08</str>
<str name="segment">20090530193233</str>
<str name="title">Welcome to Solr</str>
<long name="tstamp">20090530103400190</long>
<str name="url">http://lucene.apache.org/solr/</str>
</doc>
−
<doc>
<float name="boost">1.0557729</float>
<str name="digest">162ffa398346c1158dd37ffba6f5d99e</str>
<str name="segment">20090530195142</str>
<str name="title">FrontPage - Solr Wiki</str>
<long name="tstamp">20090530105358147</long>
<str name="url">http://wiki.apache.org/solr/</str>
</doc>

以下、省略


検索窓に「title:nutch」と入れると title に nutch を含むページが検索されると思います。
そういうページをクロールしていればの話ですが...。


さて、ここで表示されるフィールドは以下の6つです。

  • boost
  • digest
  • segment
  • title
  • tstamp
  • url


残念ながらこの段階では、hostやanchor、contentといったデータは表示されません。
schema.xmlでは stored="true" と表示可能なように定義されているのですが検索しかできないようです。
また、日本語の検索もうまく行かないようです。


この辺に対応するためには再度インデキシングし直すことが必要なようです。


というわけで、インデキシングし直して Solr から検索できるようにする方法は、次回書きたいと思います。


ではでは


中途半端だった? 次は本気出すから


ぶっちゃけポイント還元率は楽天カードと同じ、アメリカン・エキスプレス・ゴールド・カード。ポイント同じでも見た目カッコイイよけりゃいいじゃん

アメリカン・エキスプレス