2011年9月12日

第6回 Solr 勉強会に行ってきた

Solr の勉強会に行ってきました。

ので、そのメモ。

会場を提供してくださった ECナビさん、運営者の方々、ありがとうございました。

思ったよりも利用事例って多いんだなぁ、というのが雑感です。 とはいえ、解析関係の話はまだ目新しい様子なので、 検索ログを Hadoop に突っ込んでデータマイニングしたらこんなことが改善された、 という流れが増えてくると嬉しいのかなぁ、と。 問題はマイニングの結果に何を求めるかが曖昧ってことだったりしますけど。

発表とか

ロンウイット 関口 宏司さん

Lucene/Solr 3.2 から 3.4 辺りの話題です。 3.4 では電源断によるデグレ改修が大きなトピックらしいので、 3.4 が出たら 3.3 以前のバージョンは使わないようにしましょう、とのことです。

IndexWriter.addDocuments という s が付いた複数形の API が追加されました。 コレクションを追加できるようになったのは嬉しいかもしれませんね。

TieredMergePolicy で文書の親子関係を定義できるようになります。 マージするアルゴリズムに変更があったそうなので、 ドキュメントの登録順に依存しているアプリケーションがある場合は要注意だそうな。 ドキュメントをマージする様子はこちらのブログに掲載されているビデオが分かりやすいと思います。

検索対象はすべてをインデクスに保存しておかなくても良いようで、 ExternalFileField を使うと外部ファイルで管理された内容から関数クエリなどを実行できるそうです。 インデクス更新いらずなので、負荷軽減に役立つかも。

PathHierarcyTokenize はファイルパスなどを分割するためのトークナイザーですが、 分割したトークンを逆順に返すような ReversePathHierarcyTokenize が追加されたそうです。 パスで分割するイメージはこちらのブログ記事が分かりやすい感じ。

あと、クラスタリングするためのソフトウェアとして Carrot2 があります。 検索システムが大規模かつ複雑になってくると役立ちそうですね。

@PENGUINANA_ さん Solr@cookpad

Cookpad での事例紹介でした。 人気順の検索などだけでなく、社内ツールでも使ってるそうです。 3ヶ月くらいで Tritonn からフルスクラッチで移行したとのこと。 なんと Solr 4 nightly を使って。。。

Cookpad には Ruby 開発者が多いので、バッチ処理はすべて Ruby で記述するそうです。 社内の共通言語だから他の人から意見をもらいやすいんだとか。 Analyzer を自作する場合は Java で実装する必要がありますが、 分かち書き、正規化、同義語展開を事前に Ruby バッチで処理しているそうです。

運用面では、 munin でキャッシュのヒット率などをコア別に監視しています。 グラフ化されているとパッと見でもなんとなく分かりやすいですね。

  • クエリ: QTime / QPS
  • キャッシュ: hit / eviction
  • インデクス: サイズ / ドキュメント数
  • レプリケーションの所用時間

Solr はインデクスだけを保存する、というポリシーのようです。 それぞれのスキーマで indexed=truestored=false を設定しているため、 ファイルサイズが小さくなり、リプリケーションの高速化に寄与するそうです。 本文情報は MySQL から取得すれば良いので、確かに合理的な感じです。

ある検索語句にヒットするドキュメントがインデクスに存在するかを確認するためには、 Bloom Filter のコンポーネント (BloomIndexComponent) があります。 何かの機会に知っておくと良さそう。

その他にも、Cookpad では本番環境で複数のバージョンを持つ仕組みを用意してありますので、 実際のデータを使って新しい手法をタイムリーに検証できるみたいです。

発表いろいろ

その他にも充実した内容の発表でした。 詳しい内容は後日に資料が公開されることでしょう。

  • データセクション株式会社 高井さん
  • @takahi-i さん - mixi での検索システムなど
  • @yutakashino さん – solrとRの連携について
  • 阿部さん – Apache ManifoldCF

mixi では先月から検索システムに Solr を投入したそうですが、 こうした複数台の Solr サーバと大量のインデクスデータを管理するために Anuenue が作られたようです。 ナレッジの蓄積と人材の流動性を天秤にかけると、内製検索エンジンから OSS に移行する事例は増えるのかなぁと ぼんやり思いました。

Solr にはファセット検索機能も組み込まれていますので、 多様なシステムと結合していくことも可能だと思います。 プラグインで拡張していく方法、解析用ツールにデータを流す手法、 サーバーサイドで手数をかけずに何らかの表示をさせる方法など、応用事例はたくさん出てきそうですね。

  • Bobo Solr Plugin

    Bobo, being a Lucene extension for structured data, can be exposed thru the Solr facet interface.

  • ManifoldCF

    会社の中にある文書サーバからセキュリティ情報を維持してクローリングできる。ACL も考慮。

  • SolrCloud

  • ajax-solr (Solr の JavaScript ライブラリ)

コメントを投稿